首页 > 解决方案 > 如何从头开始创建新用户

问题描述

我仍在开发我的第一个 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

错误

用户控制器

用户模型

路线

会话控制器

标签: ruby-on-railsuser-management

解决方案


我今天早上登录,突然我的问题得到了解决!也许与终端关闭有关,因为我比较了我在这里发布的代码和我的文件中的内容,几乎没有什么变化。

我所做的 1 项更改是将 @ 添加到 'session[:user_id] = user.id' 以制作 '@user.id'

在我能够登录后,我收到注销错误。我所做的更改是在我的销毁方法中添加“session.clear”和“redirect_to login_path”。

我的 sessions_controller.rb 中的两项更改

我还在 routes.rb 中添加了“delete 'sessions', to: 'session#destroy'”


推荐阅读