首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时使用Devise和Doorkeeper?

如何同时使用Devise和Doorkeeper?
EN

Stack Overflow用户
提问于 2013-01-24 23:20:33
回答 2查看 4.7K关注 0票数 13

我正在构建一个web应用程序(也有一个API ),它使用Devise gem进行身份验证,我还使用Doorkeeper gem进行API部分的身份验证。

现在的问题是,当我转到接收Oauth2代码(和登录)的网址时,我被重定向到web应用程序,而不是客户端回调网址。

我需要做的是在正常登录时重定向到web应用程序,在使用Oauth时重定向到回调URL。

我该怎么做呢?我正在覆盖Devise sessions控制器,但我不知道要放入什么内容。

这是我的代码:

代码语言:javascript
复制
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似乎忽略了我的重定向逻辑。

请进一步建议。

EN

回答 2

Stack Overflow用户

发布于 2013-04-04 21:15:01

假设您的资源是user,请将session[:user_return_to] = request.fullpath添加到resource_owner_authenticator数据块

示例:

代码语言:javascript
复制
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
票数 11
EN

Stack Overflow用户

发布于 2015-11-08 03:09:06

这对我来说很有效,在ApplicationController中(Devise的控制器继承自):

代码语言:javascript
复制
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初始化器中:

代码语言:javascript
复制
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会话密钥,但这对我有效,所以我不再检查。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14504739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档