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.rbセット にありますprevent_non_active_users_to_login = false

次に、セッションコントローラーで、または を呼び出すたびにlogin()、まだアクティブ化されていないユーザーは引き続き認証さ@user.activation_state == 'active'れ、何をすべきかを決定するためにさらにチェックを行うことができます (別のメッセージを表示してリダイレクトするなど)

于 2015-04-10T19:24:59.290 に答える