我正在构建一个web应用程序(也有一个API ),它使用Devise gem进行身份验证,我还使用Doorkeeper gem进行API部分的身份验证。
现在的问题是,当我转到接收Oauth2代码(和登录)的网址时,我被重定向到web应用程序,而不是客户端回调网址。
我需要做的是在正常登录时重定向到web应用程序,在使用Oauth时重定向到回调URL。
我该怎么做呢?我正在覆盖Devise sessions控制器,但我不知道要放入什么内容。
这是我的代码:
def new
session[:return_to] = params[:return_to] if params[:return_to]
resource = build_resource
clean_up_passwords(resource)
end
def create
resource = warden.authenticate!(auth_options)
sign_in(resource_name, resource)
if session[:return_to]
redirect_to session[:return_to]
session[:return_to] = nil
else
respond_with resource, :location => after_sign_in_path_for(resource)
end
end问题是Devise似乎忽略了我的重定向逻辑。
请进一步建议。
发布于 2013-04-04 21:15:01
假设您的资源是user,请将session[:user_return_to] = request.fullpath添加到resource_owner_authenticator数据块
示例:
resource_owner_authenticator do
#raise "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"
# Put your resource owner authentication logic here.
# Example implementation:
session[:user_return_to] = request.fullpath
current_user || redirect_to(login_url)
end发布于 2015-11-08 03:09:06
这对我来说很有效,在ApplicationController中(Devise的控制器继承自):
def store_location
# store last url as long as it isn't a /users path
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
end
def after_sign_in_path_for(_resource)
session[:previous_url] || root_path
end在Doorkeeper初始化器中:
resource_owner_authenticator do
if user_signed_in?
current_user
else
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
redirect_to(new_user_session_path)
end结束
其想法是记住您在会话cookie中的路径,然后让Devise在调用自己的after_sign_in_path_for回调时重定向到那里。
Documentation指出了resource_return_to会话密钥,但这对我有效,所以我不再检查。
https://stackoverflow.com/questions/14504739
复制相似问题