ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用 JWT 进行 Rails 身份验证的完整指南

2022-11-05 12:44:43  阅读:163  来源: 互联网

标签:JWT 身份验证 指南 资源共享


轨道 JWT 身份验证

JSON Web 令牌 (JWT) 是一个 JSON 对象,用于在两方之间安全地传输信息。JWT 广泛用于在 REST API 中从客户端安全地对用户进行身份验证和授权。在这篇文章中,我将逐步介绍如何在rails API中使用JWT实现身份验证。

我们需要的宝石:

gem 'bcrypt', '~> 3.1', '>= 3.1.12’

gem 'jwt', '~> 2.5’

gem 'rack-cors'

gem 'active_model_serializers', '~> 0.10.12’

添加宝石文件后运行bundle install

创建路由

  post "/users", to: "users#create"
  get "/me", to: "users#me"
  post "/auth/login", to: "auth#login"

我们将注册向 /users 发出 POST 请求的新用户。现有用户可以通过向“/auth/login”发出 post 请求来登录,用户可以通过向“/me”发出 GET 请求来访问用户数据。我们最少需要 3 条路线,以后可以添加更多路线。

添加 CORS

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'

    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

跨域资源共享 (CORS) 是一个中间件,它将仅接受来自一个客户端 URL 的 API 请求。我们希望允许发出请求的客户端 URL 将进入。我们设置了*源,现在,这将允许任何人向我们的API发出请求。origins

创建用户模型:

rails g model user username password_digest bio --no-test-framework

在用户模型中添加宏并验证用户名:has_secure_password

class User < ApplicationRecord
    has_secure_password
    validates :username, uniqueness: true
end

has_secure_password是一种加密每个用户密码的 bcrypt 方法。为了使此方法起作用,我们将字段添加到数据库表中。但是,当我们向服务器发出发布请求时,我们会发送。Bcrypt为我们处理其余的工作。password_digestpassword

示例请求:

fetch('URL/auth/login',{
method: POST,
headers: {
    'Content-type': 'application/json'
},
body: {
    username: 'randomUserName',
    password: 'ask^dsk34'
})

将智威汤逊添加到我们的 API 中

JSON Web 令牌是一种开放的行业标准 RFC 7519 方法,用于在双方之间安全地表示声明。JWT 令牌如下所示:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

标签:JWT,身份验证,指南,资源共享
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有