首页 > 解决方案 > 如何使用 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

标签: ruby-on-rails

解决方案


我建议您使用Devisegem 进行用户身份验证。它负责用户注册、用户登录等。通过使用 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


推荐阅读