【问题标题】:How do I create the users root path route using the Devise gem?如何使用 Devise gem 创建用户根路径路由?
【发布时间】:2014-09-13 21:44:07
【问题描述】:

我进行了搜索并在 SO 上找到了 this question,但接受的答案似乎对我不起作用。基本上,Divise wiki 说...

在用户登录、确认帐户或更新 密码,Devise 将寻找一个范围内的根路径来重定向。为了 例如,对于 :user 资源,如果它使用 user_root_path 存在,否则使用默认的root_path。

凭借我对 RoR 的业余知识,我有一个名为 Player 的设计模型,并在我的 routes.rb 文件中创建了以下语句...

match 'player_root', to: 'pages#play', as: :player_root, via: :all

...但是这样,我的应用程序总是重定向到我的根路径,而不是我上面定义的播放器根路径。我做错了什么?

提前感谢您的智慧!另外,我正在使用 Ruby 2 和 Rails 4。

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    据我了解,您正在尝试为 :players 指定 root_path

    如果要这样做,您可以使用以下内容:

    authenticated :players do
      root to: 'pages#play', as: :authenticated_root
    end
    

    这将为您提供登录用户(玩家)的自定义 root_path。

    【讨论】:

      【解决方案2】:

      除了Andrey Dieneko,您还有另外两个选择:

      1. 使用unauthenticated_path
      2. 在你的控制器中使用authenticate_user!

      这里的底线是您的想法可能不正确。您可能正在尝试找出将用户 如果 进行身份验证的位置。但是,您可能更适合实际使用控制器中的身份验证方法来测试用户是否已登录,如果未登录,则将其路由到登录页面:

      #config/routes.rb
      root to: "players#play"
      
      #app/controllers/players_controller.rb
      class PlayersController < ApplicationController
          before_action :authenticate_user!
      end
      

      如果用户未登录,这会将用户带到“登录”路径。

      或者,您可以像这样使用unauthenticated_path

      #config/routes.rb
      root to: "players#play"
      
      unauthenticated do
         root to: "application#landing"
      end
      

      --

      只有当你有 Facebook 之类的应用时,这种方法才是最好的(IE 它没有“登陆页面”等)

      我认为Andrey's 的答案更贴切(尤其是如果您有登录页面)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多