1

有没有人使用 Rails Devise 插件的经验?因为在我的项目中,当用户输入用户名和密码时,我必须在另一个表中检查用户是否处于活动状态。有两个表,第一个是 the user,另一个role_membershiprole_membershiptable 中有一个名为 的列active_status。我必须检查active_status = 1否则用户是否无法登录系统。这里的任何人都知道如何配置设计插件来检查另一个表中的值。我找到了一些教程,但他们都提到了检查同一张表中的字段。

谢谢

4

2 回答 2

4

修改您的用户模型以包含两个附加方法

  • active_for_authentication?
  • 非活动消息

请参阅http://pivotallabs.com/users/carl/blog/articles/1619-standup-3-21-2011-deactivating-users-in-devise(注意:它基于旧版本的设计,下面的代码应该工作)

class User
  # check to see if a user is active or not and deny login if not
  def active_for_authentication?
    super && your_custom_logic
  end

  # flash message for the inactive users
  def inactive_message
    "Sorry, this account has been deactivated."
  end
end

用您的特定代码替换 your_custom_logic 以确定用户是否处于活动状态

附加链接:http ://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Authenticatable/

于 2012-07-16T14:54:20.907 回答
0

我最好的想法是覆盖设计 session#create 方法。为了做到这一点:

#app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController

  def create
    resource = warden.authenticate!(auth_options)
    #resource.is_active? should be implemented by you
    if resource.is_active?
      set_flash_message(:notice, :signed_in) if is_navigational_format?
      sign_in(resource_name, resource)
      respond_with resource, :location => after_sign_in_path_for(resource)
    else
      #put here your inactive user response
    end
  end

end

并在 routes.rb

devise_for :users, :controllers => {:sessions => "sessions" }
于 2012-07-16T09:51:26.833 回答