Ruby on Rails 开发实战:构建用户认证系统

樱花树下 2019-06-30 ⋅ 19 阅读

在现代Web应用程序开发中,用户认证系统是一个关键的功能,它使用户能够注册、登录和管理他们的个人信息。在本篇博客中,我们将探索如何使用Ruby on Rails框架构建一个简单而强大的用户认证系统。

环境设置

在开始之前,确保你已经安装了Ruby和Rails,并且已经创建了一个新的Rails应用程序。

让我们首先使用以下命令创建一个新的Rails应用程序:

rails new user-authentication

然后进入应用程序目录:

cd user-authentication

数据库设置

我们将使用Rails的内置ORM(对象关系映射器)Active Record来处理数据模型和数据库操作。默认情况下,Rails将使用SQLite数据库,但你也可以选择使用其他数据库。

打开config/database.yml文件,并确保在developmenttest环境中配置正确的数据库信息。

用户模型

我们首先需要创建一个用户模型来存储用户的登录凭证。运行以下命令创建一个新的User模型:

rails generate model User email:string password_digest:string

然后运行迁移来创建数据库表:

rails db:migrate

接下来,打开app/models/user.rb文件,添加以下代码来定义用户模型的关联和验证:

class User < ApplicationRecord
  has_secure_password
  validates :email, presence: true, uniqueness: true
end

has_secure_password方法将自动添加密码加密和验证功能到用户模型中。validates方法用于验证email字段不能为空并且必须是唯一的。

用户控制器

我们需要创建一个控制器来处理用户的创建、登录和注销。运行以下命令创建Users控制器:

rails generate controller Users

然后打开app/controllers/users_controller.rb文件,并添加以下代码:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      session[:user_id] = @user.id
      redirect_to root_path, notice: "注册成功!"
    else
      render :new
    end
  end

  private

  def user_params
    params.require(:user).permit(:email, :password, :password_confirmation)
  end
end

new方法用于渲染用户注册表单页面,create方法用于创建用户并跳转到主页。user_params方法用于验证和过滤用户提交的参数。

用户视图

我们需要创建视图模板来显示用户注册表单。创建一个名为_form.html.erb的文件,并添加以下代码:

<%= form_with model: @user do |form| %>
  <%= form.label :email %>
  <%= form.text_field :email %>

  <%= form.label :password %>
  <%= form.password_field :password %>

  <%= form.label :password_confirmation %>
  <%= form.password_field :password_confirmation %>

  <%= form.submit "注册" %>
<% end %>

然后,在new.html.erb文件中添加以下代码来显示注册表单:

<h1>注册新用户</h1>
<%= render 'form' %>

路由设置

打开config/routes.rb文件,并添加以下代码:

Rails.application.routes.draw do
  resources :users, only: [:new, :create]
end

这将创建用户的新建和创建路由。

用户认证

要实现用户认证,我们将使用Rails的sessions功能。运行以下命令生成sessions控制器和相关视图:

rails generate controller Sessions

然后,打开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

  def destroy
    session[:user_id] = nil
    redirect_to root_path, notice: "注销成功!"
  end
end

这定义了一个新方法new用于显示登录表单,create方法处理用户登录验证,destroy方法处理用户注销。

然后,创建一个名为new.html.erb的视图模板来显示登录表单:

<h1>用户登录</h1>
<%= form_tag sessions_path do %>
  <%= label_tag :email %>
  <%= text_field_tag :email %>

  <%= label_tag :password %>
  <%= password_field_tag :password %>

  <%= submit_tag "登录" %>
<% end %>

注册和登录链接

最后,我们将在主页上添加注册和登录链接。打开app/views/layouts/application.html.erb文件,并在正确的位置添加以下代码:

<% if session[:user_id] %>
  <%= link_to "注销", logout_path, method: :delete %>
<% else %>
  <%= link_to "注册", new_user_path %> |
  <%= link_to "登录", login_path %>
<% end %>

这将根据用户是否登录显示注册/登录链接或注销链接。

总结

通过遵循上述步骤,我们成功地创建了一个简单而强大的用户认证系统,使用Ruby on Rails框架来处理数据和用户的创建、登录和注销操作。这个用户认证系统可以作为其他Web应用的基础,也可以根据实际需求进行扩展。

希望这篇博客对您有所帮助!Happy coding!


全部评论: 0

    我有话说: