【发布时间】:2021-12-05 19:44:01
【问题描述】:
我仍在开发我的第一个 Ruby on Rails 项目。我正在处理的最新问题是用户管理系统。我尝试使用 Devise,但我无法克服某个错误,所以我决定手动创建我的登录/登录系统。我正在使用带有 Rails 7.0.0alpha2 的 Ruby 3.0.2。
我通过这种手动方式获得了更多的信息,但我得到了 BCrypt::Engine:Class 的“未定义方法‘成本’”,我在谷歌上搜索过,他们提到更改 bcrypt 的版本,但我没有运气
他们提到转到我的 user_controller 并将我的创建方法从旧代码更改为这个“@user = User.new(user_params)”这样做将我的错误从“禁止”更改为我目前正在写信给你的错误.
不确定我的问题出在哪里,我的猜测是在模型或控制器的某个地方,感谢您的宝贵时间!
用户控制器
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
【问题讨论】:
-
当你说你改变了 bcrypt 的版本时,你到底做了什么?避免在您的描述中含糊不清——该网站的大多数新用户(以及一些有经验的用户)都忘记了阅读您帖子的人不是坐在您旁边,也看不到您可以看到的内容。此外,当我们需要澄清时,这不是转向坐在你旁边的人提出问题的简单问题。您的描述必须全面而准确,否则您只会浪费时间,人们会感到无聊并在不回答您的问题的情况下徘徊。
-
请提供足够的代码,以便其他人更好地理解或重现问题。
-
@MarsAtomic,感谢您的反馈,我会努力解决的。当我更改版本时,我去了我的 gemfile,然后进行了“捆绑更新”。我的代码的屏幕截图是否显示?
-
您是否有一些教程可以将这个系统组合在一起?我已经很多年没有看过 Hartl 教程了,但我似乎记得作者喜欢使用自己的方法来为你的第一个应用程序进行身份验证。你用的是这个吗?
-
@MarsAtomic 是的,我正在使用youtu.be/fmyvWz5TUWg“学习 Ruby On Rails - 完整课程” - FreeCodeCamp.org。 2:02 在他们开始使用设计的课程中,由于我遇到的错误,我开始从头开始在谷歌上搜索用户管理,并从那里开始自己构建。
标签: ruby-on-rails user-management