Rails 关于 doorkeeper 的验证跳转问题

hxh1246996371 · 2015年04月23日 · 最后由 hxh1246996371 回复于 2015年04月23日 · 2882 次阅读

我在项目中用到了 doorkeeper,然后配置为

resource_owner_authenticator do
    MemAccount.find_by_id(session[:mem]) || redirect_to('/mem/login')
end

然后当网站为登录状态时就出现这个中间页面

但是如果是未登录的话就直接跳到了网站的登录界面,后面就跟 oauth 无关了,但是我想要的是如果是没有登录的话也跳转到上面的页面,只不过是多了一个登录的功能,类似于 qq 第三方登录,如果未检测到登录就让用户输入用户名密码,请问是我哪儿写错了吗?

还有就是 doorkeeper 能够实现生产 openid 吗 类似于 qq 登录那样的 openid 唯一标识

# This block will be called to check whether the resource owner is authenticated or not.
resource_owner_authenticator do
  #fail "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"
  # Put your resource owner authentication logic here.
  # Example implementation:
  # 支持主动跳回被授权页面
  if Doorkeeper::Application.where(uid: params[:client_id]).first.try(:name) == 'forum'
    session[:previous_url] = ENV['FORUM']
  end
  current_user || redirect_to(new_user_session_url)
  current_user
end

然后在 session 的登录成功后,加上跳回就可以了。

#2 楼 @lyfi2003 谢谢,我直接写成这样了

resource_owner_authenticator do
    session[:return_to] = request.fullpath
    MemAccount.find_by_id(session[:mem]) || redirect_to('/mem/oauth')
  end

然后再在 /mem/oauth 页面中去执行登录的验证逻辑,如果登录成功则跳到 session[:return_to]。 这样能实现,不过感觉 url 里面少了这些参数看着有点别扭

需要 登录 后方可回复, 如果你还没有账号请 注册新账号