ruby-on-rails - 如何从头开始创建新用户
问题描述
我仍在开发我的第一个 Ruby on Rails 项目。我正在处理的最新问题是用户管理系统。我尝试使用 Devise,但我无法克服某个错误,所以我决定手动创建我的登录/登录系统。我正在使用带有 Rails 7.0.0alpha2 的 Ruby 3.0.2。
我用这种手动方式走得更远,但我得到了 BCrypt::Engine:Class 的“未定义方法‘成本’”我已经用谷歌搜索过,他们提到改变 bcrypt 的版本,我没有运气
他们提到去我的 user_controller 并将我的 create 方法从旧代码更改为这个 '@user = User.new(user_params)' 这样做将我的错误从 'forbidden' 更改为我目前正在写信给你的错误。
不确定我的问题在哪里,我的猜测是在模型或控制器的某个地方,感谢您的宝贵时间!
用户控制器
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_url, notice: "Thank your for signing up!"
else
flash[:danger] = 'Invalid email/password combination'
render "new"
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
会话控制器
class SessionsController < ApplicationController
def create
@user = User.find_by_email(params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to root_url, notice: "logged in!"
else
flash.now.alert = "Email or passwrod is invalid"
render "new"
end
end
def destroy
session.delete(:user_id)
@current_user = nil
end
end
用户模型
require 'bcrypt'
class User < ApplicationRecord
include BCrypt
validates :email, uniqueness: true
has_secure_password
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
路线
Rails.application.routes.draw do
get 'sessions/new'
resources :users, only: [:new, :create]
resources :fighters
resources :sessions
get 'home/about'
root 'home#index'
get 'signup', to: 'users#new', as: 'signup'
get 'login', to: 'sessions#new', as: 'login'
get 'logout', to: 'sessions#destroy', as: 'logout'
end
解决方案
我今天早上登录,突然我的问题得到了解决!也许与终端关闭有关,因为我比较了我在这里发布的代码和我的文件中的内容,几乎没有什么变化。
我所做的 1 项更改是将 @ 添加到 'session[:user_id] = user.id' 以制作 '@user.id'
在我能够登录后,我收到注销错误。我所做的更改是在我的销毁方法中添加“session.clear”和“redirect_to login_path”。
我的 sessions_controller.rb 中的两项更改
我还在 routes.rb 中添加了“delete 'sessions', to: 'session#destroy'”
推荐阅读
- c# - 如何检查我的倒计时是否在我的函数中达到 0?
- sql - Generate month data series with null months included?
- apache-spark - 如何将数据从 spark-structured-streaming 发送到 ActiveMQ 的主题
- python-2.7 - BS4 (BeautifulSoap) - AttributeError: 'NoneType' 对象没有属性 'getText'
- excel - 查找重复次数最多的值,但仅在excel中某些颜色的单元格中
- java - 我正在尝试创建一个程序,将随机数相加并在数字超过 20 时显示一条消息
- elasticsearch - DynamoDB 上的 Elasticsearch 地图列表
- python-3.x - 在这个跟踪玩家分数的程序中,如何阻止将相同的名称写入外部 txt 文件?
- c - 在 Struct 中打印分配的 cJSON cString 触发器 EXC_BAD_ACCESS (Segmentation Fault) C lang
- spring-boot - 在 Spring Boot 中将大型数据集流式传输为 CSV