ruby-on-rails - 将用户重定向回登录页面

标签 ruby-on-rails ruby devise

我正在使用 Devise 来处理用户身份验证。我已在另一个 Controller View 中放置了登录表单。当用户通过此表单登录时,我想将他们重定向回该页面。我尝试通过以下方法来完成此任务:

应用程序 Controller

after_filter :store_location

def store_location
    return unless request.get? 
    if (request.path != "/users/sign_in" &&
        request.path != "/users/sign_up" &&
        request.path != "/users/password/new" &&
        request.path != "/login" &&
        request.path != "/signup" &&
        request.path != "/users/password/edit" &&
        request.path != "/users/confirmation" &&
        request.path != "/users/sign_out" &&
        !request.xhr?) # don't store ajax calls
      session[:previous_url] = request.fullpath 
    end
  end



def after_sign_in_path_for(resource)
    if request.referer == streams_url(page: params[:page])
      session[:previous_url] || root_path
    else 
     root_path
    end
  end

此代码的问题是,当用户从外部源访问链接或输入页面的完整地址时,它不起作用。我需要一个每次用户使用此特定表单登录时都有效的解决方案。

最佳答案

def after_sign_in_path_for(resource)
    sign_in_url = new_user_session_url
    if request.referer == sign_in_url
      super
    else
      stored_location_for(resource) || request.referer || root_path
    end
  end

在application_controller中添加上面的内容。如果最后一个请求将登录,那么它将调用父请求。

关于ruby-on-rails - 将用户重定向回登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587395/

相关文章:

ruby - 如何检查 YAML 文件,最好是在 Ruby 中

ruby-on-rails - ruby rails : Devise Users

jquery - typeahead.js 根本没有响应 - Rails

ruby-on-rails - Ubuntu 上的 Ruby Gem Guard,没有 'guard' 命令

mysql - 流行度公式语法错误

Ruby 类属性

Ruby downcase 方法没有按预期工作

ruby-on-rails - 如何配置 procfile,sidekiq.yml 以便不同的 sidekiq 队列在 heroku 中的不同 dynos 上运行?

ruby-on-rails - 在Ruby on Rails中使用Devise为用户播种

ruby-on-rails - 如何在模型中设置设计配置值