Я получаю TypeError: no implicit conversion of nil into String
для моего метода encode_token с использованием среды "jwt_secret".
Я убедился, что мой
Вот мой ApplicationController. Кодовый_код является проблемным методом, и я считаю, что это связано с тем, что мой jwt_secret env не распознается моим клиентом переднего плана, который является приложением React, которое отправляет запрос на выборку в базу данных Rails:
class ApplicationController < ActionController::API
before_action :authorized, except: [:encode_token, :decoded_token, :logged_in?]
def encode_token(payload)
JWT.encode(payload, ENV["jwt_secret"])
end
def auth_header
request.headers['Authorization']
end
def decoded_token
if auth_header()
token = auth_header.split(' ')[1]
begin
JWT.decode(token, ENV["jwt_secret"], true, algorithm: 'HS256')
rescue JWT::DecodeError
nil
end
end
end
def current_user
if decoded_token()
user_id = decoded_token[0]['user_id']
@user = User.find_by(id: user_id)
else
nil
end
end
def logged_in?
!!current_user
end
def authorized
render json: { message: 'Please log in' }, status: :unauthorized unless logged_in?
end
end
И мой пользовательский контроллер:
class Api::V1::UsersController < ApplicationController
# before_action :find_user, only: [:show]
skip_before_action :authorized, only: [:index, :create]
def index
@users = User.all
render json: @users
end
def create
@user = User.create(user_params)
if @user.valid?
@token = encode_token(user_id: @user.id)
render json: { user: UserSerializer.new(@user), jwt: @token }, status: :created
else
render json: { error: 'failed to create user' }, status: :not_acceptable
end
end
def show
@user = User.find_by(id: params[:id])
render json: @user
end
end
private
def user_params
params.require(:user).permit(:username, :password)
end