使用 JWT 进行 Rails 身份验证的完整指南
2022/11/5 14:53:55
本文主要是介绍使用 JWT 进行 Rails 身份验证的完整指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
轨道 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_digest
password
示例请求:
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 进行 Rails 身份验证的完整指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22程序员出海做 AI 工具:如何用 similarweb 找到最佳流量渠道?
- 2024-12-20自建AI入门:生成模型介绍——GAN和VAE浅析
- 2024-12-20游戏引擎的进化史——从手工编码到超真实画面和人工智能
- 2024-12-20利用大型语言模型构建文本中的知识图谱:从文本到结构化数据的转换指南
- 2024-12-20揭秘百年人工智能:从深度学习到可解释AI
- 2024-12-20复杂RAG(检索增强生成)的入门介绍
- 2024-12-20基于大型语言模型的积木堆叠任务研究
- 2024-12-20从原型到生产:提升大型语言模型准确性的实战经验
- 2024-12-20啥是大模型1
- 2024-12-20英特尔的 Lunar Lake 计划:一场未竟的承诺