使用Devise

时间:2015-08-21 22:57:00

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

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  

1 个答案:

答案 0 :(得分:0)

根据@Sewards建议,我将根路由更改为指向“portal / dashboard @ index”(登录页面)并为其指定了user_root_path。

这解决了上述问题。

基于Devise文档:

  

登录用户后,确认帐户或更新帐户   密码,Devise将查找重定向到的作用域根路径。对于   例如,当使用:user资源时,将使用user_root_path   如果它存在;否则,将使用默认的root_path。