Войдите в систему после принятия приглашения, используя rails с devise_invitable

Я использую devise_invitable с Rails и мне нужна помощь. Я хочу, чтобы пользователь вошел в систему после принятия приглашения. Вот мой InvitationsController

class InvitationsController < Devise::InvitationsController
  def update
    if User.accept_invitation!(user_params)
      # log in user here
      redirect_to dashboard_show_path, notice: t('invitaion.accepted')
    else
      redirect_to root_path, error: t('invitation.not_accepted')
    end
  end

  private
  def user_params
    params.require(:user).permit(:invitation_token, :password, :password_confirmation)
  end
end

Вы можете увидеть комментарий в коде

# log in user here

здесь я хочу войти в систему пользователя, который принял приглашение.

Спасибо.


person Edward    schedule 06.02.2013    source источник


Ответы (1)


Метод, который вы ищете, это sign_in, попробуйте следующее:

def update
  if User.accept_invitation!(user_params)
    sign_in(params[:user])
    redirect_to dashboard_show_path, notice: t('invitaion.accepted')
  else
    redirect_to root_path, error: t('invitation.not_accepted')
  end
end

Однако я должен отметить, что devise_invitable по умолчанию регистрирует пользователей после того, как они приняли приглашение. См. действие обновления по умолчанию здесь, если вы хотите использовать функциональность по умолчанию, просто вызовите метод super или вообще не реализуйте действие обновления.

person Noz    schedule 06.02.2013
comment
sign_in(params[:user]) Приводит к ошибке Could not find a valid mapping for {"invitation_token"=>"xQjPyREVoFwW1pwejm9r", "password"=>"12345678", "password_confirmation"=>"12345678"} Использование super или изменение реализации метода аналогично действию обновления по умолчанию работает хорошо. Спасибо - person Edward; 07.02.2013