【问题标题】:How do I create new user from scratch如何从头开始创建新用户
【发布时间】: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

Error

User Controller

User Model

Routes

Session Controller

【问题讨论】:

  • 当你说你改变了 bcrypt 的版本时,你到底做了什么?避免在您的描述中含糊不清——该网站的大多数新用户(以及一些有经验的用户)都忘记了阅读您帖子的人不是坐在您旁边,也看不到您可以看到的内容。此外,当我们需要澄清时,这不是转向坐在你旁边的人提出问题的简单问题。您的描述必须全面而准确,否则您只会浪费时间,人们会感到无聊并在不回答您的问题的情况下徘徊。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • @MarsAtomic,感谢您的反馈,我会努力解决的。当我更改版本时,我去了我的 gemfile,然后进行了“捆绑更新”。我的代码的屏幕截图是否显示?
  • 您是否有一些教程可以将这个系统组合在一起?我已经很多年没有看过 Hartl 教程了,但我似乎记得作者喜欢使用自己的方法来为你的第一个应用程序进行身份验证。你用的是这个吗?
  • @MarsAtomic 是的,我正在使用youtu.be/fmyvWz5TUWg“学习 Ruby On Rails - 完整课程” - FreeCodeCamp.org。 2:02 在他们开始使用设计的课程中,由于我遇到的错误,我开始从头开始在谷歌上搜索用户管理,并从那里开始自己构建。

标签: ruby-on-rails user-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'”

【讨论】:

    猜你喜欢
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2021-04-12
    • 2021-11-18
    相关资源
    最近更新 更多