身份验证是现代应用程序中不可或缺的一部分。它使我们能够限制访问和保护用户的个人信息。在本博客中,我们将学习如何使用Ruby on Rails构建一个简单的用户身份验证系统。
步骤1:创建Rails应用程序
首先,我们需要创建一个新的Rails应用程序。在终端中运行以下命令:
$ rails new user-authentication
$ cd user-authentication
这将创建一个名为user-authentication
的新的Rails应用程序,并将你切换到该目录中。
步骤2:创建User模型和数据库表
接下来,我们将创建一个名为User
的模型和相关的数据库表。在终端中运行以下命令:
$ rails generate model User name:string email:string password_digest:string
$ rails db:migrate
这将生成一个具有姓名、电子邮件和密码散列字段的User
模型,并在数据库中创建相关的表。
步骤3:添加bcrypt gem
我们将使用bcrypt gem来处理用户密码的安全散列。在Gemfile中添加以下代码:
gem 'bcrypt', '~> 3.1.7'
然后运行bundle install
来安装gem。
步骤4:更新User模型
在app/models/user.rb
文件中,添加以下代码来设置用户身份验证:
class User < ApplicationRecord
has_secure_password
end
has_secure_password
会自动提供密码散列和验证功能。
步骤5:创建用户注册和登录页面
我们将创建用户注册和登录页面,以便用户可以创建新账户并使用已有的账户进行登录。在终端中运行以下命令:
$ rails generate controller Registrations new create
$ rails generate controller Sessions new create
这将分别生成名为RegistrationsController
和SessionsController
的控制器,并创建相关的视图文件。
在app/views/registrations/new.html.erb
文件中,添加以下代码来显示用户注册表单:
<h1>注册</h1>
<%= form_with model: @user, url: registrations_create_path do |form| %>
<%= form.label :name %>
<%= form.text_field :name, autofocus: true %>
<%= form.label :email %>
<%= form.email_field :email %>
<%= form.label :password %>
<%= form.password_field :password %>
<%= form.label :password_confirmation %>
<%= form.password_field :password_confirmation %>
<%= form.submit "注册" %>
<% end %>
在app/views/sessions/new.html.erb
文件中,添加以下代码来显示用户登录表单:
<h1>登录</h1>
<%= form_with url: sessions_create_path do |form| %>
<%= form.label :email %>
<%= form.email_field :email, autofocus: true %>
<%= form.label :password %>
<%= form.password_field :password %>
<%= form.submit "登录" %>
<% end %>
<p>
还没有账号?<a href="<%= registrations_new_path %>">注册</a>
</p>
步骤6:更新控制器和路由
更新app/controllers/registrations_controller.rb
文件,添加以下代码来处理用户注册:
class RegistrationsController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to root_path, notice: "账号创建成功!请登录。"
else
render :new
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
end
更新app/controllers/sessions_controller.rb
文件,添加以下代码来处理用户登录:
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = @user.id
redirect_to root_path, notice: "登录成功!"
else
flash.now.alert = "无效的邮箱或密码!"
render :new
end
end
end
在config/routes.rb
文件中,添加以下代码来定义注册和登录的路由:
Rails.application.routes.draw do
root "pages#home"
get "signup", to: "registrations#new", as: "registrations_new"
post "signup", to: "registrations#create", as: "registrations_create"
get "login", to: "sessions#new", as: "sessions_new"
post "login", to: "sessions#create", as: "sessions_create"
end
步骤7:添加注销功能
最后,我们还可以添加一个注销功能,以允许用户退出登录。在app/views/layouts/application.html.erb
文件中,添加以下代码:
<% if current_user %>
<%= link_to "注销", logout_path, method: :delete %>
<% else %>
<%= link_to "登录", sessions_new_path %>
<%= link_to "注册", registrations_new_path %>
<% end %>
在app/controllers/application_controller.rb
文件中,添加以下代码来处理注销:
class ApplicationController < ActionController::Base
before_action :current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
更新config/routes.rb
文件中的路由:
Rails.application.routes.draw do
# ...
delete "logout", to: "sessions#destroy", as: "logout"
end
更新app/controllers/sessions_controller.rb
文件,添加以下代码来处理注销:
class SessionsController < ApplicationController
# ...
def destroy
session[:user_id] = nil
redirect_to root_path, notice: "注销成功!"
end
end
恭喜!你已经成功添加了用户身份验证功能。用户现在可以注册、登录和注销他们的账户。
在这篇博客中,我们学习了如何使用Ruby on Rails构建一个简单的用户身份验证系统。这只是一个入门级别的实现,你可以根据自己的需求进行扩展和定制。希望你能从中受益,并将它应用于自己的项目中。祝你好运!
本文来自极简博客,作者:夜色温柔,转载请注明原文链接:如何使用Ruby on Rails添加用户身份验证