我正在尝试使用前端响应登录为我的Rails应用设置JWT令牌授权。这是我的第一次,但是已经在网上关注了,因此我出了点问题。会喜欢另一组可以看到我做错事情的眼睛。
我安装了以下宝石,以使JWT正常工作:
gem 'bcrypt', '~> 3.1.7'
gem 'rack-cors'
gem 'knock'
我已根据config/initializers/knock.rb
将这一行代码添加到https://www.techandstartup.com/tutorials/rails-react-jwt
。
我的应用程序控制器如下:
class ApplicationController < ActionController::Base
skip_before_action :verify_authenticity_token
include Knock::Authenticable
end
我的routes.rb文件如下:
Rails.application.routes.draw do
get '/quizes' => 'quizzes#quiz'
scope '/quizes' do
resources :quizes
post 'user_token' => 'user_token#create'
end
end
我的users.rb(模型文件)如下所示:
class User < ApplicationRecord
has_secure_password
validates :email, :presence => true, :uniqueness => true
end
这完全符合建议的一切,然后在前端,当单击登录时,我进行了一个函数调用,而我只是试图找回JWT令牌以查看是否在这个时候实际存在。
我进行此调用的react函数是:
const login = () => {
const email = 'ben@ga.co'
const password = 'test'
const request = { "auth": { "email": email, "password": password } }
console.log(request)
axios.post("http://localhost:3000/quizes/user_token", request).then((result) => console.log(result.jwt))
}
当前,我在控制台中收到POST http://localhost:3000/quizes/user_token 422 (Unprocessable Entity)
错误(我在localhost上同时运行两个服务器)
在chrome的网络标签中,它显示是来自Rails的错误,具有以下详细信息:
def handle_unverified_request
raise ActionController::InvalidAuthenticityToken
end
end
end
尽管我所做的大多数研究都表明,此电子邮件与应用程序控制器中缺少此行skip_before_action :verify_authenticity_token
有关,但是我已经收到了。
还请注意,详细信息中没有错误,已检查。
“网络”标签还显示服务器已成功接收信息,如下所示:
{"auth"=>{"email"=>"ben@ga.co", "password"=>"[FILTERED]"}, "user_token"=>{"user"=>{"email"=>"ben@ga.co", "password"=>"[FILTERED]"}}}
任何帮助或指导将不胜感激。