4

ユーザーが確認されていない場合にユーザーを別のページにリダイレクトする方法で、devise のユーザー サインイン動作を変更したいと考えています。

私の中に次のコードがありますapp/controllers/sessions_controller.rb

  # POST /user/sign_in
  def create

    @user = warden.authenticate!(:scope => :user) 
    sign_in @user
     respond_with @user, :location => after_sign_in_path_for(@user)

  end

ユーザーが正しいユーザー名/パスワードを入力しても確認されない場合、Warden はエラーを発生させ、ユーザーをサインイン ページ (コード 302) にリダイレクトします。同時に、これは flash[:alert] を「未確認」にします。

未確認のユーザーを特定のページにリダイレクトする方法はありますか?

これを回避するための私のアイデアは、flash[:alert] 値を読み取り、値が「未確認」であるが、ワーデンがユーザーに関する追加データを送信していない場合は適切なページにリダイレクトすることでした。

4

4 に答える 4

2
class SessionsController < Devise::SessionsController
  def create
    @user = User.where(:email => params[:user][:email])[0] # you get the user now
    if @user.confirmed?
      super
    else
      redirect_to YOUR_DESIRED_path # or something else you want to do
    end
  end
end
于 2013-01-22T06:28:50.013 に答える
2

これを行うには、カスタム FailureApp が必要です (そして、他の Rails アクションと同様に、ルートなどで /unconfirmed を定義する必要があります):

lib/custom_failure.rb

class CustomFailure < Devise::FailureApp
  def redirect_url
    if warden_message == :unconfirmed
      '/unconfirmed'
    else
      super
    end
  end

  # You need to override respond to eliminate recall
  def respond
    if http_auth?
      http_auth
    else
      redirect
    end
  end
end

config/initializers/devise.rb:

  config.warden do |manager|
    manager.failure_app = CustomFailure
  end
于 2016-12-22T01:18:06.500 に答える
-1

登録が成功した後に未確認のユーザーがサインインすることを許可したくない場合は、この行をdevise.rbに入れてください。

config.allow_unconfirmed_access_for = nil 
于 2013-12-11T10:34:23.847 に答える