C#开发人员学习Rails,请原谅我看似基本的东西。我正在使用Devise进行登录验证。
首先,我在routes.rb中设置了一些路由:
devise_for :user, skip: [:sessions, :passwords], controllers: { sessions: "portal/sessions" }
devise_scope :user do
root to: "portal/sessions#new"
get "login", to: "portal/sessions#new", as :new_portal_session
end
我的user.rb型号:
class User < ActiveRecord::Base
devise :database_authenticatable, :recoverable, :trackable, :validatable
end
当我第一次点击localhost:3000时,一切都很棒。能够看到登录页面,输入凭证等。登录后,它会按预期将我重定向到我的门户/门户网站#dashboard。
但是,一旦我登录并尝试再次访问localhost:3000(root或登录页面),它将进入一个递归循环,终端中有以下输出(通过“rails s”):
Started GET "/" for 127.0.0.1 at <DATE>
...removed
...removed
Redirected to http://localhost:3000/
Filter chain halted as :require_no_authentication rendered or redirected
Completed 302 Found in 30ms (ActiveRecord: 27.9ms)
我必须CTRL-C服务器让它停止。如果我完全关闭浏览器上的所有选项卡,并从新浏览器重新打开localhost:3000,它将正常显示登录屏幕。
任何人都会引导我指出为什么会发生这种情况或如何解决这个问题?
一如既往地谢谢!
编辑: 根据要求添加了SessionsController。
以下是SessionsController的代码。
class Portal::SessionsController < Devise::SessionsController
respond_to :json, only: [:create]
layout "portal/public"
def new
super
end
def create
super
end
end
答案 0 :(得分:0)
根据@Sewards建议,我将根路由更改为指向“portal / dashboard @ index”(登录页面)并为其指定了user_root_path。
这解决了上述问题。
基于Devise文档:
登录用户后,确认帐户或更新帐户 密码,Devise将查找重定向到的作用域根路径。对于 例如,当使用:user资源时,将使用user_root_path 如果它存在;否则,将使用默认的root_path。