Rails中的使用者验证:Devise
概要:Devise是Ruby On Rails的一个三方权限认证组件,通过它可以无需编码快速生成一个带有登陆,注册.权限认证和重置密码的认证模块.
安装:
1.新建一个rails项目
# rails new ks
2.在Gemfile中添加
# gem 'devise'
3.输入bundle install 安装此套件
# bundle install
4.输入rails g devise:install生成devise相关文件
# rails g devise:install
5.编辑config/environments/development.rb 和 production.rb 加入寄信时预设的网络地址:
# config.action_mailer.default_url_options = { :host => 'localhost:3000' }
6.确认app/views/layouts/application.html.erb layout 中可以显示 flash 訊息,例如:
# <p class="notice"><%= notice %></p>
# <p class="alert"><%= alert %></p>
7.新建一个controller
# rails g controller home index
- 编辑routes设置默认首页
# root 'home#index'
9.执行rails g devise User
该命令会产生:
1.在app/models文件夹下产生了一个user.rb,也就是创建了一个user model
2.在db/migrate文件夹下产生了一个migrate文件
3.在config/routes.rb文件中添加了一行 devise_for :users
10.配置user —编辑app/models/user.rb文件
11.输入rails g devise:views 产生模板,这会生成包括注册/登入/忘记密码/Email等页面,放在app/views/devise目录下面
12.输入rake db:migrate建立数据表
13.在home_controller中加上
# before_action :authenticate_user!
14.可以在Layout中加上登入,登出选项
<% if current_user %>
<%= link_to('登出', destroy_user_session_path, :method => :delete) %> |
<%= link_to('修改密碼', edit_registration_path(:user)) %>
<% else %>
<%= link_to('註冊', new_registration_path(:user)) %> |
<%= link_to('登入', new_session_path(:user)) %>
<% end %>
15.Devise预设不会产生first_name,last_name等属性,我们可以向users表中添加username属性
# rails g migration add_username_to_users
在生成的表中加入:
# add_column :users, :username, :string
执行rake db:migrate
16.编辑application_controller.rb加上configure_permitted_parameters方法:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
# ...
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
devise_parameter_sanitizer.for(:account_update) << :username
end
end
17.编辑views/devise/registrations/edit.html.erb和views/devise/registrations/new.html.erb加上username字段
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true %>
</div>
18.如果使用qq邮箱进行测试,请在邮箱设置里面开启smtp服务