使用Rails进行JWT令牌授权

时间:2019-05-11 00:27:43

标签: ruby-on-rails reactjs jwt

我正在尝试使用前端响应登录为我的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]"}}}

任何帮助或指导将不胜感激。

0 个答案:

没有答案