неинициализированная константа AuthenticationController - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь аутентифицировать пользователя с помощью аутентификации JWT, и у меня возникла проблема.

{
  "id": 1,
  "name": "gabriel",
  "username": "gabriel_carneiro",
  "email": "gabriel.bsb98@gmail.com",
  "password_digest": "$2a$12$7K.Z/ixpVM.lOkINboFW5.tvVlPYFnbMTEreVrrR4IClAL.70IQkO",
  "created_at": "2020-06-17T11:13:27.116Z",
  "updated_at": "2020-06-17T11:13:27.116Z"
}

Тогда мне нужно его подтвердить. Я отправляю его через почтальон:

электронная почта : gabriel. bsb98@gmail.com пароль : 12345678

Я получил это сообщение об ошибке:

 {   "status": 500,   "error": "Internal Server Error",   "exception":
 "#<NameError: uninitialized constant
 AuthenticationController::JsonWebToken>",   "traces": {
     "Application Trace": [
       {
         "exception_object_id": 70261772705960,
         "id": 0,
         "trace": "app/controllers/authentication_controller.rb:8:in `login'"
       }

Выдает ошибку в строке 8 на контроллере аутентификации. Это мой контроллер аутентификации:

class AuthenticationController < ApplicationController
    before_action :authorize_request, except: :login

    # POST /auth/login
    def login
      @user = User.find_by_email(params[:email])
      if @user&.authenticate(params[:password])
        token = JsonWebToken.encode(user_id: @user.id)
        time = Time.now + 24.hours.to_i
        render json: { token: token, exp: time.strftime("%m-%d-%Y %H:%M"),
                       username: @user.username }, status: :ok
      else
        render json: { error: 'unauthorized' }, status: :unauthorized
      end
    end

    private

    def login_params
      params.permit(:email, :password)
    end

end

Как я могу решить эту проблему? \ Ps: Это руководство, которое я прочитал https://medium.com/binar-academy/rails-api-jwt-authentication-a04503ea3248

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Похоже, что ваш класс "AuthenticationController::JsonWebToken" не объявлен, и Rails хочет искать его в теле AuthenticationController class.

После того, как вы поместили класс JsonWebToken в папку lib, убедитесь, что путь автозагрузки добавлен в config/application.rb файл:

config.autoload_paths << “#{Rails.root}/lib” 

как сказал @ Eyeslandi c.

0 голосов
/ 17 июня 2020

Скорее всего, вам придется добавить эту строку к config/application.rb

class Application < Rails::Application
  config.autoload_paths << “#{Rails.root}/lib” 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...