【问题标题】:uninitialized constant SessionsController::User未初始化的常量 SessionsController::User
【发布时间】:2020-04-17 07:22:49
【问题描述】:

我正在尝试为我的 Rails 应用程序编写登录系统,但出现会话错误。对于更多上下文,我没有用户类,但有一个 EmployeeAuthentication 和 Employee 类,它有我的登录方法。

目前,这是我的 session_controller.rb

class SessionsController < ApplicationController
   def new
  end

  def create
    user = User.authenticate(params[:username], params[:password])
    if user
      session[:user_id] = user.id
      redirect_to home_path, notice: "Logged in!"
    else
      flash.now.alert = "Username and/or password is invalid"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to home_path, notice: "Logged out!"
  end
end

这是我的路线文件:

Rails.application.routes.draw do

  # Semi-static page routes
  get 'home', to: 'home#index', as: :home
  get 'home/about', to: 'home#about', as: :about
  get 'home/contact', to: 'home#contact', as: :contact
  get 'home/privacy', to: 'home#privacy', as: :privacy
  get 'home/search', to: 'home#search', as: :search

  # Resource routes (maps HTTP verbs to controller actions automatically):
  resources :employees
  resources :stores
  resources :assignments
  resources :users
  resources :sessions

  # Custom routes
  patch 'assignments/:id/terminate', to: 'assignments#terminate', as: :terminate_assignment

  # You can have the root of your site routed with 'root'
  root 'home#index'


  get 'user/edit' => 'users#edit', :as => :edit_current_user
  get 'signup' => 'users#new', :as => :signup
  get 'login' => 'sessions#new', :as => :login
  get 'logout' => 'sessions#destroy', :as => :logout


end

【问题讨论】:

  • 如果你没有User 课程,那你为什么要这样做:User.authenticate(params[:username], params[:password])
  • 您在这里问的究竟是什么?很明显,您没有引用它的 User 类将导致丢失常量错误。这是您从某个地方复制的一些代码,但您不了解如何适应您的应用程序,或者您只是想找其他人为您完成工作?

标签: ruby-on-rails authentication session routing controller


【解决方案1】:

您是否出于教育目的从头开始编写身份验证?如果没有,最好不要“重新发明轮子”。身份验证及其近亲授权专门处理您的应用程序的安全性,您不应该将安全性留在自己手中(特别是如果您过去从未从头开始编写完整的身份验证系统并测试过它的废话)。

在构建 Rails 应用程序时,我倾向于使用“devise”gem 进行身份验证,使用“cancancan”gem 进行授权。这两个 gem 几乎与 Rails 一样长,并且经过多年的尝试和测试,它们是在 Web 应用程序中实现身份验证和授权的经过验证的安全选项。

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多