1
I’m using rails JWT for login for backend. The user is verified with login information and returns the token perfectly when it’s ran locally but on Heroku it’s returning “Invalid username or password”.
On heroku logs --tail it receives the login params fine but somehow it shows this User Load (2.6ms) SELECT "users".* FR OM "users" WHERE "users"."username" IS NULL LIMIT $1
Somehow the user is returning NULL on heroku logs.
I’m not done building the app so please don’t mind the extra codes I have.
Thanks for the help!
Here’s my users_controller
def index
render json: User.all
end
# REGISTER
def create
@user = User.create(user_params)
if @user.valid?
token = encode_token({user_id: @user.id})
render json: {user: @user, token: token}
else
render json: {error: "Invalid username or password"}
end
end
# LOGGING IN
def login
@user = User.find_by(username: params[:username])
if @user && @user.authenticate(params[:password])
token = encode_token({user_id: @user.id})
render json: {user: @user, token: token, error: false}, status: :accepted
else
render json: {error: "Invalid username or password", error: true}, status: :unauthorized
end
end
# def auto_login
# render json: @user
# end
private
def user_params
params.permit(:username, :password)
end
end
**application controller**
before_action :authorized, only: [:create]
def encode_token(payload)
JWT.encode(payload, 's3cr3t')
end
def auth_header
# { Authorization: 'Bearer <token>' }
request.headers['Authorization']
end
def decoded_token
if auth_header
token = auth_header.split(' ')[1]
# header: { 'Authorization': 'Bearer <token>' }
begin
JWT.decode(token, 's3cr3t', true, algorithm: 'HS256')
rescue JWT::DecodeError
nil
end
end
end
def logged_in_user
if decoded_token
user_id = decoded_token[0]['user_id']
@user = User.find_by(id: user_id)
end
end
def logged_in?
!!logged_in_user
end
def authorized
render json: { message: 'Please log in' }, status: :unauthorized unless logged_in?
end
end