设计身份验证

时间:2015-12-13 12:39:01

标签: ruby ruby-on-rails-4 authentication devise string-comparison

我是rails的新手,我创建了简单的Administrate管理面板,简单的设计身份验证,效果很好。

当我创建用户时,我在dropDown菜单中定义了Admins,Users或Testers。 所以我的问题是我想检查用户是否是Admin让他进来,如果用户是其他任何人不让他进去。我想让它尽可能简单,所以当有人想登录检查字段组时,如果它管理员说,没关系。

我的代码:

AdminUser模型

    class Adminuser < ActiveRecord::Base
     # Include default devise modules. Others available are:
     # :confirmable, :lockable, :timeoutable and :omniauthable
     devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

     #before_filter :grupa.eql? "admin"
    end

设计配置:

config.authentication_keys = [:grupa]

设计新的sesion:

<%= stylesheet_link_tag "style.css" %>

         &lt;%= form_for(resource,as:resource_name,url:session_path(resource_name))do | f | %GT;     

  <div class= "ex" id="rcorners1">

    <h2>Log in for Admin</h2>
    <div>
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
    <% :grupa.eql? "Admin" %>
    </div>

  <div>
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </div>

  <% if devise_mapping.rememberable? -%>
    <div>
      <%= f.check_box :remember_me %>
      <%= f.label :remember_me %>
    </div>

  <% end -%>
  <div class: 'button'>
    <%= f.submit "Log in" %>
  </div>
</div>
  </div>
<% end %>
</body>

<%#= render "devise/shared/links" %>

提前致谢。

1 个答案:

答案 0 :(得分:0)

我用一个access_denied方法解决了类似的情况,在application_controller.rb中定义了

  def access_denied
    respond_to do |format|
    format.html { render :text => "Unauthorized", :status => 401, :message => "Unauthorized" }
    format.json { render json: {:error => {:code => 401, :message => "Unauthorized"}}, status: :unauthorized }
end

为您的用户定义.admin?方法,可能只是检查组成员身份或您想要做的任何事情,然后在您想要保护的控制器中执行类似的操作,

def index
  return access_denied unless current_user.admin? 
end

或者,您可以创建一个执行检查的辅助方法,如果要将相同的逻辑应用于整个控制器,则可以将其用作before_filter。 像,

before_filter :only_allow_admin_users