使用Devise的情况下在Doorkeeper验证跳转

当我们发起oauth2 request,从application跳转到第三方页面,然后填写用户名密码,登录,授权。
如果我们已经登录,那自动跳转回application。很多时候我们会搞混第三方页面登录后跳转和跳转回application这两件事情。

application这个跳转是Doorkeeper帮我们搞定的,其实这个过程可以看成是我们普通浏览一个url,这个url需要登录后才能浏览。
而处理这个url的Doorkeeper能够帮我们跳转回application。

Devise在我们使用用户名密码登录之后,一般我们会有照网站用户登录的行为跳转回主页的设定,但是,这样对于application就麻烦了。
我们需要的是在Devise验证登录之后,跳转到我们application发起的request。(注意这里不是跳转回application,我们还需要通过Doorkeeper进一步处理,由Doorkeeper跳转回Application)

这样逻辑就清晰很多了,做法就是把最初request的url写入session之后重载Devise的registrations和sessions等controller提供的方法。

1
2
3
4
5
6
# config/initializers/doorkeeper.rb
resource_owner_authenticator do
session[:return_to] = request.fullpath
current_user || redirect_to(new_user_registration_path)
#warden.authenticate!(scope: :user)
end
1
2
3
4
5
6
7
8
9
### app/controllers/users/registrations_controller.rb
def after_sign_up_path_for(resource)
session[:return_to] ? session[:return_to] : super(resource)
end

#app/controllers/users/sessions_controller.rb
def after_sign_in_path_for(resource)
session[:return_to] ? session[:return_to] : super(resource)
end
如果你觉得本文对你有帮助,请给我点赞助。