ruby-on-rails - 如何使用 login def 验证登录表单
问题描述
控制器
class UsersController < ApplicationController
layout false
def index
@users = User.all
end
def new
@user = User.new
end
def create
@user = User.create(user_params)
redirect_to user_params
end
def show
@user = User.find(params[:id])
# redirect_to user_params
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.update(user_params)
redirect_to user_path(@user)
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
def login
@message = "hello"
@user = User.where(email: params[:email], password: params[:password])
redirect_to users_path
end
private
def user_params
params.require(:user).permit(:id, :name, :contact, :address, :email, :password)
end
end
路线
Rails.application.routes.draw do
root 'users#new'
resources :users
get '/users:id', to: 'users#destroy', as: 'delete'
end
解决方案
我建议您使用Devise
gem 进行用户身份验证。它负责用户注册、用户登录等。通过使用 Devise gem,您最终不会创建已经存在的东西。
步骤如下:
- 将以下行添加到您的
Gemfile
gem 'devise'
然后运行bundle install
- 运行生成器:
$ rails generate devise:install
- 使用文件
User
中配置的路线创建设计模型config/routes.rb
$ rails generate devise User
跑rails db:migrate
- 要设置具有用户身份验证的控制器,只需添加此 before_action
before_action :authenticate_user!
Devise
使用gem 的附加优势是:
- 辅助方法可用
user_signed_in?
current_user
user_session
- 如果您想允许其他参数
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
end
- 可以生成设计视图和控制器以进行定制
$ rails generate devise:views users
$ rails generate devise:controllers users
在此处了解有关设计 gem 的更多信息:https ://github.com/heartcombo/devise#getting-started
推荐阅读
- c# - 使用 c# 控制台应用程序中的嵌套 for 循环从右上角到左下角绘制对角线
- html - Umbraco 8 宏某些 HTML 标签未在后台呈现
- shell - 将irssi的输出重定向到文件
- protractor - 无法在量角器-multiple-cucumber-html-reporter 中更新报告名称
- firebase - 将 Java 桌面应用程序连接到 Firebase-analytics
- ios - 如何将 Xcode 更新到 11.0,目前我正在使用 macOS High Sierra(版本 10.13.6),我无法更新我的 macOS
- bluetooth-lowenergy - 更改 CSR 4.0 USB BLE Mac 地址
- android - 应用程序因“找不到支持的表面信息 - CameraId:null”而崩溃
- python - 如何在 Python 中使用 read_excel 函数读取多个 Excel 表(不区分大小写)
- java - 如何放心地重置/删除/清除请求正文