1

尝试以“待定”激活状态登录帐户时,如何使魔法宝石显示特定错误?

4

2 回答 2

1

我花了一段时间才弄清楚,直到我在写的 github 存储库问题中没有找到一种方法, 所以我只想在这里复制(并稍微改变一下),这样更容易找到它如果其他人有这个问题。

1)在 config/initializers/sorcery.rb 更改为

user.prevent_non_active_users_to_login = false

2)更改或重写某处的“登录”方法,如下所示:

     def login(*credentials)
        @current_user = nil
        if credentials[0].is_a?(user_class)
          user = credentials.shift
          credentials.unshift(nil, nil)
        else
          user = user_class.authenticate(*credentials)
        end
        if user
          old_session = session.dup.to_hash
          reset_sorcery_session
          old_session.each_pair do |k,v|
            session[k.to_sym] = v
          end
          form_authenticity_token

          auto_login(user)
          after_login!(user, credentials)
          current_user
        else
          after_failed_login!(credentials)
          nil
        end
      end

3)在控制器中,您可以使用以下内容:

  def create
    user = User.authenticate(params[:email], params[:password])
    if user
      if user.activation_state == 'active'
        login(user, params[:remember_me])
        redirect_back_or_to root_url, :notice => "Logged in"
      else
        render :pending
      end
    else
      flash.now.alert = "Email or password was invalid"
      render :new
    end
  end
于 2014-04-28T06:08:22.993 回答
0

一个更简单的方法是在config/initializers/sorcery.rbset prevent_non_active_users_to_login = false

然后在您的会话控制器中,或每当您调用时login(),尚未激活的用户仍将通过身份验证,您可以进一步检查@user.activation_state == 'active'以决定要做什么(显示不同的消息和重定向等)

于 2015-04-10T19:24:59.290 回答