当我点击user_token控制器时,我可以成功生成令牌。然后将其发送给我的客户端,我可以在Chrome控制台的“应用程序”标签中进行验证。但是,当我尝试通过身份验证的请求时,我得到:
Filter chain halted as :authenticate_user rendered or redirected
我可以验证Authorization标头是随请求一起发送的(它具有Bearer键和JWT作为值),因此看来Knock不喜欢我创建的令牌。在Knock文档中并没有真正提到令牌的创建。我使用JWT gem文档来学习如何做,但是我想我可能会缺少一些东西。如果有人可以看看,将不胜感激。这是我的创建方式:
# controllers/user_token_controller.rb
class UserTokenController < Knock::AuthTokenController
def create
user = User.find_by_email(user_token_params[:email])
if user&.authenticate(user_token_params[:password])
token = JWT.encode(user_token_params, ENV["SECRET_KEY_BASE"], "HS256")
render json: {token: token}
else
render json: {error: "invalid email or password."}
end
end
private
def user_token_params
params.require(:auth).permit(:email, :password)
end
end