首先在gemfile中加上
gem 'devise'
在命令行中运行
bundle install
在项目中添加devise
rails generate devise:install
如果在用户验证功能里需要用到邮件验证,则需要把下面的代码加到config/environments/development.rb 和 production.rb中
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
另外在app/views/layouts/application.html.erb里可以加上下面的代码,用于显示登录过程中的各种警告信息
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
最后,还需要在路由文件添加root action并且添加view,这个root action就是登录成功后跳转的页面,比如可以这样添加
root 'welcome#index'
devise作为权限管理包,用于权限管理,那么首先需要有一个用户模型来存储用户
rails g devise user //生成devise的user模型
rake db:migrate //数据迁移
添加权限管理相关的登录注册等页面
rails generate devise:views
通过在页面中添加这些代码可以添加登陆注册的入口
<h1>Log In</h1>
<% if user_signed_in? %>
hello, <%= current_user.username %>! You are <%= current_user.role %>
<%= link_to('登出', destroy_user_session_path, :method => :delete) %>
<% else %>
<%= link_to('注册', new_registration_path(:user)) %>
<%= link_to('登录', new_session_path(:user)) %>
<% end %>
点击连接会进入对应的页面中
devise会默认创建一个帮助方法:
before_action :authenticate_user!
user_signed_in? //判断用户是否登录
current_user //获取当前登录用户
user_session //可以访问对应的session
在controller中添加before_action :authenticate_user!会让相应的页面进行权限控制未登录的状态下会自动进入登录页面,登陆后默认跳转回root页面
为了让用户在登录后跳转回刚才打开的页面,需要覆盖after_sign_in_path_for和after_sign_out_path_for来自定义跳转回调
修改错误提示:Devise处理错误信息的方式是把所有需要的信息都用i18n的方式保存在config/local目录下的/config/locales/devise.en.yml 文件中,直接修改成中文就行
private
def set_spuser
if current_spuser
@spuser = Spuser.find(current_spuser)
end
end