【问题标题】:rails devise gem redirect looprails 设计 gem 重定向循环
【发布时间】:2014-10-08 17:43:29
【问题描述】:

我正在使用带有 rails 4.1.4 应用程序的 devise gem,并且需要在用户登录后立即在会话变量中添加一些自定义键值对。

我覆盖了以下方法

after_sign_in_path_for(resource)
after_sign_up_path_for(resource)
after_update_path_for(resource)
after_resetting_password_path_for(resource) 此处规定的方法:

https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

然而,在登录时,我多次输入after_sign_in_path_for,输出如下:

Started GET "/users/sign_in" for 127.0.0.1 at 2014-10-08 22:56:45 +0530 Processing by Devise::SessionsController#new as HTML
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Redirected to http://localhost:3000/users/sign_in Filter chain halted as :require_no_authentication rendered or redirected Completed 302 Found in 3ms (ActiveRecord: 0.6ms)

每次,在最终将我重定向到根路径之前。 (在将我重定向到根目录之前,浏览器会暂时显示重定向循环错误消息)。

编辑:

事实证明,由于我有 2 个不同的设计模型(用户和管理员),after_sign_in_path_for 中的这行代码:

sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')

正在创建 URL "http://localhost:3000/admins/sign_in" 而不是 "http://localhost:3000/users/sign_in"

如何将 url_for 默认设置为 users 模型而不是 admin 模型?

谢谢!

【问题讨论】:

    标签: redirect ruby-on-rails-4 devise


    【解决方案1】:

    我自己遇到了这个问题。无论出于何种原因,url_for 似乎默认为管理员(不知道为什么)好消息是您不必使用url_for 来完成此操作。

    相反,摆脱

    sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')
    

    替换

    if request.referer == sign_in_url
    

    if request.referer == new_user_session_url
    

    帮助器使您的代码更简洁,并允许您指定所需的设计模型。

    【讨论】:

    • 哈哈谢谢我做了类似的事情,完全忘记了这个!
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多