Ruby on Rails实现最基本的用户注册和登录功能的教程

在 Rails 实现用户注册和登录功能是非常方便的,比如可以使用 Devise 这类实现了完整功能的 gem 扩展包。也可以使用 Rails 自带的 has_secure_password 来自已打造。下面就是尝试使用 has_secure_password 来实现用户注册和登录功能。

准备工作

创建项目:

rails new user_login

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

# Use ActiveModel has_secure_password
gem 'bcrypt', '~> 3.1.7'

保存后退出,执行 bundle install 命令安装新启用的 gem 包。

创建用户模块

操作和管理用户信息需要先创建保存用户的数据表和模型:

rails g model user name:string password_digest:string

password_digest 这个字段是用来保存加密混淆后的密码串的,必须提供并且不能更改成其它名称,否则无法正常使用 has_secure_password 提供的功能。

然后在用户模块中引入 has_secure_password 功能:

# app/models/user.rb
class User < ActiveRecord::Base
 has_secure_password
end

创建用户数据表:

rake db:migrate

实现注册功能

创建一个 Applicant(申请者) 控制器用来处理用户注册:

rails g controller applicants new create

applicants 控制器提供了两个方法:

  • new: 用来处理注册界面
  • create: 用来保存注册信息

上面命令创建的控制器方法,默认使用的都是 get 请求。保存注册信息的 create 方法使用的是 post 请求。所以需要到 config/routes.rb 中修改如下内容:

post 'applicants/create'

完成注册控制器功能:

# app/controllers/applicants_controller.rb

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

 def create
  @user = User.create(user_params)
  if @user.save
   redirect_to :sessions_new
  else
   render "new"
  end
 end

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

完成注册界面功能:

<!-- app/views/applicants/new.html.erb -->

<h1>注册</h1>

<% if @user.errors.any? %>
<ul>
  <% @user.errors.full_messages.each do |message| %>
  <li><%= message %></li>
  <% end %>
</ul>
<% end %>

<%= form_for @user, url: :applicants_create do |f| %>
  <p>
    <%= f.label :name %>
    <%= f.text_field :name %>
  </p>

  <p>
    <%= f.label :password %>
    <%= f.password_field :password %>
  </p>

  <p>
    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>
  </p>

  <p><%= f.button "提交" %></p>
<% end %>

这样就简单的实现了注册功能。

实现登录功能

创建一个 Session(会话) 控制器用来处理用户登录和退出:

rails g controller sessions new create

这里在 sessions 控制器上默认创建了 2 个方法:

  • new: 用来处理登录界面
  • create 用来处理登录流程

跟注册一样,需要修改 create 的默认路由为 post:

# config/routes.rb

post 'sessions/create'

完成会话控制器的功能:

# app/controllers/sessions_controller.rb

class SessionsController < ApplicationController
 def new
 end

 def create
  user = User.find_by(name: user_params[:name]).try(:authenticate, user_params[:password])
  if user
   render plain: sprintf("welcome, %s!", user.name)
  else
   flash.now[:login_error] = "invalid username or password"
   render "new"
  end
 end

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

完成会话登录界面:

<!-- app/views/sessions/new.html.erb -->

<h1>登录</h1>

<% if flash[:login_error] %>
  <p><%= flash[:login_error] %></p>
<% end %>

<%= form_for :session, url: :sessions_create do |f| %>

  <p>
    <%= f.label :name %>
    <%= f.text_field :name %>
  </p>

  <p>
    <%= f.label :password %>
    <%= f.password_field :password %>
  </p>

  <p><%= f.button "登录" %></p>

<% end %>
(0)

相关推荐

  • 编写Ruby脚本来对Twitter用户的数据进行深度挖掘

    Twitter以及一些API 尽管早期的网络涉及的是人-机器的交互,但现在的网络已涉及机器-机器之间的交互,这种交互是使用web服务来支持的.大部分受欢迎的网站都有这样的服务存在--从各种各样的Google服务到LinkedIn.Facebook和Twitter等.通过web服务创建的API,外部的应用可以查询或是操纵网站上的内容. web服务可以使用多种方式来实现.目前最流行的做法之一是表述性状态转移(Representational State Transfe, REST).REST的一种实

  • Ruby on Rails实现最基本的用户注册和登录功能的教程

    在 Rails 实现用户注册和登录功能是非常方便的,比如可以使用 Devise 这类实现了完整功能的 gem 扩展包.也可以使用 Rails 自带的 has_secure_password 来自已打造.下面就是尝试使用 has_secure_password 来实现用户注册和登录功能. 准备工作 创建项目: rails new user_login has_secure_password 中加密的功能需要用到 bcrypt ,所以需要在项目中启用 bcrypt gem 包.进入项目目录,修改 G

  • windows下安装ruby与rails时遇到的问题总结

    前言 最近因为工作的需要,准备安装ruby on rails,在网上搜了下,步骤都类似,但实际安装过程中却碰到很多问题. 说明下:文章是按照我尝试的过程描述的.但最终是靠 运行 railsinstaller一键式安装包才成功的(第五段),因此前面的部分大家可以看看,但不用去尝试. 下面来看看详细的介绍吧: 一.首先要安装ruby 因为在windows下安装ruby,都是推荐下载rubyinstaller安装程序. 先进入ruby官网http://www.ruby-lang.org/en/down

  • Ruby on rails安装后去掉DL is deprecated,please use Fiddle警告信息的方法【测试可用】

    本文实例讲述了Ruby on rails安装后去掉DL is deprecated,please use Fiddle警告信息的方法.分享给大家供大家参考,具体如下: 问题: 搭建完完ruby on rails环境之后发现每次运行命令总会有这样一个Warning:DL is deprecated, please use Fiddle,例如: 对运行什么的没有影响,只是Dl过时了,可是Ruby大大不管这个问题,可是看着就烦呐~~ 解决方法(from stackflow): 找到安装目录D:\Rai

  • Ubuntu上配置Ruby on Rails框架及RubyMine IDE开发环境

    准备阶段的碎碎念 在virtualbox安装过程中由于这样那样的原因,产生许多坑. 坑1.关于终端,一定要使用启动器打开 安装完虚拟机,进入系统,我们便会遇到第一个坑,终端软件,建议大家都使用启动器打开终端, 千万不要使用文件管理器,进入文件夹,再右键"在终端中打开",这个时候,环境变量加载不上,尤其在非桌面文件夹进入时.终端加载不上环境变量,大多的软件都没法在终端中执行. 打开终端时,一定要通过启动器,所谓启动器,就是在bantu中放在桌面左侧的侧边栏,很像windows中的快捷方式

  • 在Ruby on Rails中使用Rails Active Resource的教程

    简介 当今的应用程序不仅需要和基于浏览器的客户端互操作,还需要和其他应用程序互操作.为实现互操作性,web 应用程序通常提供一个 web 服务 API.web 服务 API 通过一个网络(比如 Internet)提供对应用程序 的远程访问.直到最近,web 服务 API 还使用重型.复杂的基于 SOAP 的 web 服务集成,这种 web 服务,不仅没有什么优点,而且还需要很长时间才能实现.带有基于 Representational State Transfer (REST) 服务的 Rails

  • 简单对比分析Ruby on Rails 和 Laravel

    在线web应用程序开发目前有许多正流行的框架.  也有许多不同类型的框架,比如那些拥有大量插件,可以让你更加快速的迭代 (比如 Rails),或者还有其它非常简单和低级别的 (比如 Flask). web应用程序开发中两个相对而言更加流行的框架是 Ruby on Rails 和 Laravel.  它们两个都是非常成熟的项目,已经面世相当长一段时间了 .  Ruby on Rails 在2005年12月被引入,而 Laravel 则是2012年2月 . 如上所示的第一次发布的时间, Larave

  • Ruby on Rails中MVC结构的数据传递解析

    如果读者已经开发过基于 Rails 的应用,但对其 MVC 间的数据传递还有诸多困惑,那么恭喜您,本文正是要总结梳理 Rails 数据传递的方法和技巧.Ruby on Rails 3(以下统称为 Rails 3)是当前的主要发布版本,本文所述及的内容和代码都基于此版本. Rails 3 简介 Ruby on Rails 是一个 Ruby 实现.采用 MVC 模式的开源 Web 应用开发框架,能够提供 Web 应用的全套解决方案.它的"习惯约定优于配置"的设计哲理,使得 Web 开发人员

  • 快速安装Ruby on Rails的简明指南

    对于新入门的开发者,如何安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是个问题,本页主要介绍如何用一条靠谱的路子快速安装 Ruby 开发环境. 次安装方法同样适用于产品环境! 系统需求 首先确定操作系统环境,不建议在 Windows 上面搞,所以你需要用: Mac OS X 任意 Linux 发行版本(Ubuntu,CentOS, Redhat, ArchLinux ...) 强烈新手使用 Ubuntu 省掉不必要的麻烦! 以下代码区域,带有 $ 打头的表示需要在控制台(

  • 在Ruby on Rails中优化ActiveRecord的方法

    Ruby on Rails 编程常常会将您宠坏.这一不断发展的框架会让您从其他框架的沉闷乏味中解脱出来.您可以用习以为常的几行代码片断表达自己的意图.而且还可以使用 ActiveRecord. 对于我这样的一个老 Java? 程序员而言,ActiveRecord 多少有点生疏.通过 Java 框架,我通常都会在独立的模型和模式之间构建一种映射.像这样的框架就是映射框架.通过 ActiveRecord,我只定义数据库模式:或者用 SQL 或者用称为迁移(migration)的 Ruby 类.将对象

  • Ruby on Rails基础之新建项目

    Ruby on Rails 目录结构 + app/ #控制器.模型.视图.帮助方法.邮件.静态资源 + bin/ #rails脚本 + config/ #路由.数据库等 + db/ #数据库模式.迁移文件 + lib/ #扩展模块 + log/ #日志 + public/ #公共资源 + test/ #单元测试 - config.ru #Rack服务器的程序设置.用于启动程序 - Gemfile,Gemfile.lock #指定Gem依赖,用于bundler gem - Rakefile #保存

随机推荐