Rails中的使用者验证:Devise

来源:互联网 发布:微信小号矩阵 编辑:程序博客网 时间:2024/05/22 09:41

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
  1. 编辑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服务

0 0
原创粉丝点击