因为书上采用单点登录,单点登录虽然方便,但是一开始测试时要搞域名等反向代理,比较麻烦,所以直接创建登录页面。

5.2.1创建用户模型

和书上例子兼容,我们给电影网站添加一个用户评论者的模型。

rails generate model Moviegoer name:string provider:string uid:string
rake db:migrate

我们不采用单点登录,因此添加一个密码项,也可以添加邮箱email之类的

rails g migration add_column_to_moviegoers password_digest:string
rake db:migrate

has_secure_password 中加密的功能需要用到 bcrypt ,所以需要在项目中启用 bcrypt gem 包。进入项目目录,修改 Gemfile 文件如下内容:

gem 'bcrypt', '~> 3.1.7'

在命令行下运行命令使得gem生效

bundle install

如果rails服务器在运行,记得重启。

修改app/models/moviegoer.rb

class Moviegoer < ApplicationRecord
  has_secure_password
end

5.2.2创建新建用户界面

创建控制器创建用户

rails g controller applicants new create

在路由config/routes.rb中添加/修改以下路由

  get 'applicants/new'
  post 'applicants/create'

修改app/controllers/applicants_controller.rb

class ApplicantsController < ApplicationController
  def new
    @moviegoer = Moviegoer.new
  end

  def create
    params.permit!
    @moviegoer = Moviegoer.create(params[:moviegoer])
    if @moviegoer.save
      redirect_to :sessions_new
    else
      render "new"
    end
  end

private
  def user_params
    params.require(:moviegoer).permit(:name, :password, :password_confirmation)
  end
end