新手问题 用 Devise 添加了一个 admin 的角色,登录无效。

tracyzhang · 2015年04月01日 · 最后由 tracyzhang 回复于 2015年04月02日 · 2649 次阅读

不知道自己该不该新手自称。学习 ruby 几个月。最近用 ror 做项目。之前做了几年的 javaweb。

遇到的问题是这样的:

项目用 rails admin 做系统管理后台,因此需要再加一个 admin 的角色来登录这个后台管理系统。(已经有一个 user 的 devise)

我先贴下代码

1)$ rails g devise Administrator
2)   $ rails g devise:controllers administrators

3)config/routes.rb:

devise_for :administrators, :controllers => {
  :registrations => "administrators/registrations",
  :sessions => "administrators/sessions",
  :passwords => "administrators/passwords"
}

4)config/initializers/rails_admin.rb:

config.authenticate_with do
  warden.authenticate! scope: :administrator
end
config.current_user_method(&:current_administrator)

5) app/controllers/application_controller.rb:

def require_administrator_login
   if current_administrator.blank?
     respond_to do |format|
       format.html { authenticate_administrator! }
       format.json { head(:unauthorized) }
     end
   end
 end

=================== 我发现当程序运行到 app/controllers/administrators/sessions_controller.rb 的 create 方法第一行 《self.resource = warden.authenticate!(auth_options)》这句报错。 报的错是(图中的 ‘aa’ 我是为了调试程序而故意写的)

这是 log

================== 查了很多文档,也没什么大的头绪。不知大家有什么好的建议?

那你把那个 aa 去掉会有什么效果呢?

@blacktulip 去掉 aa 后的效果就是 登录画面输入邮箱密码后点登录按钮,画面跳转一下之后,还是到登录画面。 画面 notice 抛出的错误是 “邮箱或密码错误”,但是我确定我的邮箱和密码正确。。。

会不会是我 devise.rb 的配置出了什么问题。

我知道问题出在哪里了。 devise.rb 的 config.case_insensitive_keys = [ :login ] 这句配置。当初用 user 的 divse 时候,需求是 邮箱/用户名/手机号 都可以登录。 现在这样写的话,devise 是认为 user 和 admin 冲突了把。

参考了 devise 的 wiki 后,完美解决。https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address

======== If you are using multiple models with Devise, it is best to set the authentication_keys on the model itself if the keys may differ: devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login] ======== 这样的话 我的 user.rb 里是 :authentication_keys => [:login] ,admin.rb 是 :authentication_keys => [:email]

需要 登录 后方可回复, 如果你还没有账号请 注册新账号