私のアプリには、保護されているユーザ認証が必要なアクションがあります。私はdeviseを使用しているので、私はauthenticate_userを使用します!フィルターの前にそれらを保護する。ユーザーが保護されたページにアクセスするたびに、ユーザーにログインを要求し、保護されたページにリダイレクトします。この部分は完全に機能します。Facebookのようなomniauthプロバイダを使用している場合、Deviseは格納された場所に正しくリダイレクトされません
問題は、ユーザーが自分のアプリを通じてFacebookにログインしようとすると、ログインした後、ユーザーが保護されたページにリダイレクトしないということです。ユーザーは常にrootのURLに戻ります。標準認証ではこれは問題ではありません
私はそれがdevise - omniauthの統合に必要なパススルー方法と関係があると思われています。
def facebook
# You need to implement the method below in your model
omniauth = request.env["omniauth.auth"]
@user = User.find_for_facebook_oauth(omniauth, current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.facebook_data"] = env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
def passthru
render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
end
あなたがこれを理解できましたか?私は今、同じ問題を抱えています。私は、deviseとomniauthをどのように統合して前のページにリダイレクトするかを理解できないようです。 – kibaekr
はあなたのクライアントまたはあなたのプロバイダのこのコードですか? – emerak