首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让Devise和JWT与我的Versioned API Rails控制器一起工作?

Devise是一个用于身份验证和用户管理的流行Ruby on Rails插件,而JWT(JSON Web Token)是一种用于在不同系统之间传输安全信息的标准。在Versioned API Rails控制器中同时使用Devise和JWT可以实现用户认证和授权。

下面是一种实现方式:

  1. 首先,确保你已经安装了Devise和JWT相关的Gem包。可以在Gemfile文件中添加以下内容并运行bundle install来安装这些依赖:
代码语言:txt
复制
gem 'devise'
gem 'devise-jwt'
  1. 在终端中运行以下命令来生成Devise的用户模型和配置文件:
代码语言:txt
复制
rails generate devise:install
rails generate devise User

这将生成一个名为User的模型,并生成与Devise相关的配置文件。

  1. 在生成的User模型中,使用Devise的:jwt_authenticatable模块替代默认的:database_authenticatable模块。这将允许用户通过JWT进行认证。确保在模型中添加以下内容:
代码语言:txt
复制
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :jwt_authenticatable, jwt_revocation_strategy: JWTBlacklist
end
  1. 创建一个名为JWTBlacklist的新文件,并添加以下内容:
代码语言:txt
复制
class JWTBlacklist < ApplicationRecord
  include Devise::JWT::RevocationStrategies::Blacklist

  self.table_name = 'jwt_blacklist'
end

这将创建一个与Devise关联的黑名单,用于使过期的JWT无效。

  1. 在配置文件config/initializers/devise.rb中添加以下内容来配置JWT:
代码语言:txt
复制
Devise.setup do |config|
  # ...

  config.jwt do |jwt|
    jwt.secret = ENV['DEVISE_JWT_SECRET_KEY']
    jwt.dispatch_requests = [
      ['POST', %r{^/api/v[0-9]+/login$}]
    ]
    jwt.revocation_requests = [
      ['DELETE', %r{^/api/v[0-9]+/logout$}]
    ]
    jwt.expiration_time = 1.day.to_i
  end

  # ...
end

这里设置了JWT的密钥、请求路径和过期时间等信息。

  1. 在Versioned API Rails控制器中,你可以通过以下方式来实现Devise和JWT的工作:
代码语言:txt
复制
class Api::V1::YourController < ApplicationController
  before_action :authenticate_user!
  respond_to :json

  # 其他操作方法...
end

这将在Versioned API Rails控制器中启用身份验证,并将其限制为只允许经过身份验证的用户访问。

这样,当用户访问Versioned API Rails控制器时,Devise和JWT将一起工作。用户在登录时将获得一个JWT令牌,然后在每个请求中将该令牌添加到请求头中进行身份验证和授权。你可以使用其他适合你的方法来处理这些请求头。

除了这些步骤,还有一些其他的配置和定制化选项可供参考,比如添加注册、密码重置等功能。更多细节可以参考Devise和JWT的官方文档。

希望这个回答对你有所帮助!如果你需要更多关于云计算或其他相关领域的帮助,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

关于 Node.js 的认证方面的教程(很可能)是有误的

同时我也一直在 Node/Express 中寻找强大的、一体化的解决方案,来与 Rails 的 devise 竞争。...如果你想要一个类似于 Plataformatec 的 devise 的 Ruby on Rails 的强大的解决方案,你可能会对 Auth0 感兴趣,它是一个使认证成为服务的开创项目。...请注意: 我不是故意针对这些教程的开发人员,而是使用他们的身份验证所存在的漏洞后会让自己的身份验证系统产生安全问题。如果你是教程作者,请在更新教程后随时与我联系。...也许我们的初级 Node.js 开发人员曾经听说过 JWT,或者看到过 passport-jwt,并决定实施 JWT 策略。无论如何,接触 JWT 的人都会或多或少地受到 Node.js 的影响。...如果你真的需要强大的生产完善的一体化身份验证库,那么可以使用更好的手段,比如使用具有更好的稳定性,而且更加经验证的 Rails/Devise。

4.6K90
  • oauth 流程_简明同义词典

    维基百科: OAuth(开放授权)是一个开放标准,允许用户让第三方应用(网站/app)访问该用户在另一网站(qq, 微博,微信等等)上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用...(笔记和摘录) 目标 OAuth2 协议怎么运行的 看懂基于OAuth2的第三方API 知道怎么用Oauth2 锁你的API(不理解) 课表 Oauth2是什么 通信协定怎么跑 制造Oauth2...不需要User, 只存取公开资料, Client Credentials Grant Flow 160页 发生错误时的回应方式171页 ---- 拿到Token了,如何打API (RFC6750 ‘...就上手(244页, 有详细步骤) 用Devise生成User(Resource Owner) 用Doorkeeper盖 Authorization Server 用Grape盖API (Resource...Server) 自己刻 Resource Server Guard 来锁api 第2步骤: rails g doorkeeper:install rails g doorkeeper:migration

    1.5K10

    Rails 从入门到完全放弃

    相比PHP,可以达到Rails : PHP = 1 : 4 的效率。但对于一个技术架构成熟的技术团队来说,放弃原有的技术架构去使用一个从未接触过新技术,时间成本和决心是很重要的。...为了能够掌握最新版本的知识,下载了相应的英文版PDF,一起结合。修炼Rails的过程是痛并快乐着的,因为要转变思维模式,去接受新的思想,去了解诸多的语法糖因何而生。...Devise 和 OmniAuth 这两个Gem的使用不多,在尝试过Devise之后,还是得自己手写一遍登录等功能,第三方登录开始有考虑用,后面发现还用不上就没有研究了。...前端JS处理 随着JS的增多,维护起来会越来越难,在Rails的项目中并没有做JS模块化,而是将JS用工厂模式汇集到了一起,新的功能代码会放到工厂车间去,在使用的时候 new 一个工厂,调用需要的功能即可...融合Elixir的特性,让多线程成为利器,利好多多,如果可以,你应该像我一样去深入研究下Phoenix,还有你们常用的Devise也是Phoenix的作者写的。

    2.2K20

    精选 Flexport 在 HackerOne 这一年 6 个有趣的安全漏洞

    修复: 短期的修复方案是在用户输入传递给 Bootbox 展示之前,将所有可能和 XSS 相关的标签删除(JSXSS 提供了一个节点模块让这部分变得很简单)。...对所有在 React 之外工作的库都不能信任,并且要尽可能地避免使用它们。...一开始,我们收到一份报告,展示了如何通过暴力攻击来获得已泄露用户的访问权限。 ? 原因: 我们使用 Authy 作为我们的 2FA 合作伙伴,他们的 rails gem 不包括任何内置的速率限制。...Authy rails gem hook 住 Devise (一个受欢迎的 rails 认证/用户管理库),并在登录后使用以下代码要求 2FA: def check_request_and_redirect_to_verify_token...result end 这会让用户重新登录。

    2.4K80

    最受推荐的 9本全栈开发书籍,助web前端开发学习

    最后,你还将了解如何使用Laravel Passport来处理Vue和API之间的经过身份验证的AJAX请求,从而完成整个堆栈结构。...3、《Rails, Angular, Postgres, and Bootstrap》 Rails是构建web应用程序的一个很好的工具,但不是最好的,通过Angular 4、Bootstrap和PostgreSQL...结合可以构建一个功能更加强大的应用,本书涵盖了Postgres 9.5、Rails 5和Ruby 2.3。...Angular 5和ASP.NET Core 2的功能和特性结合在一起,实现全栈开发 通过本书,你将学习如何使用Angular 5的功能,使用Entity Framework Core构建数据模型,使用...前端就是网站的门面,它的价值远大于其他的客户端开发。有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入。我们会一起结伴同行。

    4K10

    框架分析(6)-Ruby on Rails

    框架分析(6)-Ruby on Rails 主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。...约定优于配置 Rails框架倡导“约定优于配置”的开发理念,通过一系列的约定和规则,减少开发人员在配置方面的工作。...例如,Rails会根据命名规范自动映射URL路径到控制器和动作,减少了手动配置路由的工作。...RESTful路由 Rails框架支持RESTful风格的路由,通过简单的配置,可以将URL路径与控制器和动作进行映射。这使得开发人员可以更容易地创建符合RESTful设计原则的API接口。...优缺点 优点 快速开发 Rails框架采用了“约定优于配置”的开发理念,通过一系列的约定和规则,减少了开发人员在配置方面的工作。

    39020

    以太坊区块链 Asp.Net Core的安全API设计 (上)

    这种方式不实用,并且有一些用户体验限制,我们需要一种方法让用户证明他拥有与他想要用来登录的帐户相关的私钥,而不是只(当然)要求私钥,而不管他是否进行交易。...验证方法首先通过接受签名和明文消息作为输入的函数从签名中推断帐户(也称为公钥)。如果计算的以太坊地址等于用户提供的帐户,则为该帐户发出JWT Token。...为了与我们的用户合作,我们还需要配置Cors策略。...控制器,核心方法,Authenticate和Authenticate2尚未实现。...一旦实现,他们将完成相同的工作:从签名中恢复以太坊地址,并检查它是否等于客户端提供的以太坊地址。

    1.2K30

    使用Eclipse MicroProfile(更新版)构建您的下一个微服务

    本快速教程将向您展示如何使用最新版本的Eclipse MicroProfile API构建您的下一个微服务。...现在有很多提供API的服务器和框架,这意味着您可以继续使用相同的API和性能来选择最好的工具来运行您的微服务。本文是一个使用MicroProfile API构建下一个微服务的快速教程。...配置管理 容错 指标 健康检查 智威汤逊(JWT)授权 类型安全的REST客户端 开放API 开放分布式追踪 这些规范组在一起成了Eclipse MicroProfile 1.3。...初始项目设置 那么你如何利用这些项目呢?这个快速指南可以教你编写你的第一个应用程序。MicroProfile仅指定了API和行为,但不包含指定的功能。这是由Payara Micro提供的功能实现的。...那么典型的微服务是什么样的? 一个JAX-RS控制器。由于我们公开了REST API,我们希望控制器能够处理API调用。 某种服务。您需要一些支持组件来生成或使用数据。

    2.8K20

    推荐17-Laravel 中使用 JWT 认证的 Restful API

    在此文章中,我们将学习如何使用 JWT 身份验证在 Laravel 中构建 restful API 。JWT 代表 JSON Web Tokens 。...我们还将使用 API 为用户产品创建功能齐全的 CRUD 应用。 在使用跨平台应用程序时, API 是一个非常不错的选择。除了网站,您的产品可能还有 Android 和 iOS 应用程序。...说明 我们先写下我们的应用程序详细信息和功能。我们将使用 JWT 身份验证在 laravel 中使用 restful API 构建基本用户产品列表。...构建产品部分 要创建产品部分,我们需要 Product 模型,控制器和迁移文件。运行以下命令来创建 Product 模型,控制器和迁移文件。...然后我们删除产品后并根据删除操作的成功状态返回适当的响应。 控制器代码现在已经完成, 完整的控制器代码 在这。 测试 我们首先来测试身份认证。

    11K20

    Rust 不适合开发 Web API

    Node.js 有 passport.js,Rails 有 devise,Django 有开箱即用的身份验证模型,在 Rust 中,你需要学习如何将共享 Vec 转换到底层加密库才能构建这个系统(译者注...2Rust 编译器比以前快,但仍然很慢 我一直在看 Nicholas Nethercote 的博客,描述了 Rust 团队如何优化编译器,让它更快! 但与其它编程语言相比,用它构建网站会很慢。...3Rust 很复杂 Rust 让你从代码维度进行思考,这对系统编程来说非常重要。它让你思考如何共享或复制内存,思考真实但不太可能的小概率事件,并确保妥善处理它们,帮你编写各种各样的高效代码。...这是它宣传语中的重要部分,这是绝对正确的:Rust 的承诺安全和底层两者兼而有之——它可以在没有垃圾收集器的情况下工作,同时防止基于内存的漏洞。...我确信 Facebook 内部有一些特定的数据库与 GraphQL 结合在一起使用效果非常棒,但业内其他企业则非常依赖 Postgres 和同类产品。

    2.3K10

    DartVM服务器开发(第八天)--http服务端框架

    例如,GitHub API公开组织,存储库,问题和拉取请求资源; 社交网络API具有配置文件,帖子和用户关系。...控制器链接在一起以形成一系列要为请求采取的操作。这些链接在一起的控制器称为通道。如果将上述示例链接在一起,则通道将在发送包含数据库行的响应之前检查请求是否已获得授权。 有两种控制器。...服务对象的目的是为更详细的行为提供简单的界面。例如,数据库连接是服务对象; 数据库连接的用户不知道如何建立连接或如何将查询编码到线路上的详细信息,但它仍然可以执行查询。 服务对象的主要用户是控制器。...这个实现很容易定制 - 它可以在不同类型的数据库中存储授权工件(如令牌和客户端标识符)或使用JWT等无状态授权机制。默认实现利用Aqueduct ORM在PostgreSQL中存储工件。...会话管理 使用简单的类似Map的界面读取和更新会话数据。 JWT代币 关于JWT令牌的会话。 身份验证和授权 密码验证。

    2.7K40

    Node.js-具有示例API的基于角色的授权教程

    示例API仅具有三个端点/路由来演示身份验证和基于角色的授权: /users/authenticate - 接受body中带有用户名和密码的HTTP POST请求的公共路由。...共享的组件文件夹包含可以供应用程序的多个功能和其他部分使用的代码,并带有下划线前缀,以将它们分组在一起,因此可以一目了然地轻松查看内容。...如果将角色参数留为空白,则路由将被限制到任何经过身份验证的用户,无论角色如何。在用户控制器中使用它来限制对“获取所有用户”和“按ID获取用户”路由的访问。...路径:/users/users.controller.js 用户控制器为api定义了所有用户路由,路由定义在文件顶部分组在一起,并且路由实现在下面。...重要说明:api使用“"secret”属性来签名和验证用于身份验证的JWT令牌,并使用您自己的随机字符串对其进行更新,以确保没有其他人可以生成JWT来获得对应用程序的未授权访问。

    5.7K10

    Laravel 开发 RESTful API 的一些心得

    // more }); 如果前端想跨域,请使用这个很方便的包barryvdh/laravel-cors 一个简单的接口示例 接口代码 验证 API 开发总会离不开验证,这里推荐使用jwt-auth...,1.0 快要来了,新版本的文档也很清晰 刚用jwt-auth时有疑问,Laravel自带的token验证使用的是数据库api_token字段验证,而不见jwt-auth需要这个 然后想自己看源码,结果...异常 异常算是一大手笔了,处理好异常,可以让你的代码优雅很多。...,然后粘贴到api.json文件 swagger 记得也把写好的格式保存到api.yaml,因为清楚缓存之后,下次访问时会消失 自己写了一个packages 就方便创建控制器,验证 所有控制器继承重写过的基类...:laravel-api-helper 工作和API开发有关,用到其他有经验了再回来补补。

    43210

    「容器云架构」基于NGINX 的Kubernetes控制器

    NGINX Plus用户还为有状态应用程序获得会话持久性,为api获得JSON Web Token (JWT)认证。...Kubernetes的NGINX入口控制器是如何工作的 默认情况下,Kubernetes服务的豆荚不能从外部网络访问,只能通过Kubernetes集群中的其他豆荚访问。...需要提供对Kubernetes服务的外部访问的用户创建一个定义规则的入口资源,包括URI路径、支持服务名称和其他信息。进入控制器然后可以自动编程一个前端负载均衡器,以启用进入配置。...在上面的示例中,我们使用注释来定制Ingress控制器,方法是启用对咖啡服务的会话持久性,并配置JWT验证。...有关可以使用NGINX和NGINX Plus在Ingress控制器上配置的所有附加功能的详细列表,请参阅存储库。

    1.3K20

    MongoDB5.0版本新特性速览

    该抽象层允许用户始终将数据作为原始的单个文档来进行处理,因此用户不需要再关系时序数据是如何存储和持久化的,只需要关注业务层该如何使用或分析这些时序数据即可。 如何使用?...中间涉及到的代码变更,驱动升级,全面的兼容性测试等等都带来了大量的工作量。...Versioned API可以在这样的场景下发挥作用,也就是说数据库升级到了更新的版本,但是存量业务还是会使用旧版的API来进行访问。不会存在不兼容的问题。...换句话说,该功能 将应用程序的生命周期与数据库的更新彻底解耦了 。 [versioned API.png] Live Resharding 尝试彻底解决数据库初始建模不合理的问题 。...自动更新server版本,会利用 Versioned API 的能力 可能是看到其他云服务提供商基于MongoDB在做类似的事情,官方决定自己下场做了,让我们期待一下。

    3.7K30

    不要学习“网红”编程语言

    私底下使用 Ruby 解决此问题,尽可能在管理层发现不了的情况下工作。 创建一个草根阶级联盟,通过培养文化的方式培养 Ruby 布道者。...剩下的工作让 Ruby 完成就可以了。不过,为了建立你的试点项目,你首先需要创建一个案例,让 Ruby 看起来足够吸引眼球,从而让大家甘心冒这个风险。接着,你得在你的试点策略里面添筋加骨。...在所有 HubSpot API 实施意见中,Ruby 版本的人气(根据 stars 和 forks 判断)和更新频率都是最低的。...2010 年时 Ruby 的 SDK 和 API 客户端都是最亮眼的,之所以出色,是因为当时的 API 与 SaaS 开发团队往往会自己动手编写 Ruby 版本,所以客户端质量自然不在一个层面上。...2010 年那会 Rails 的成功催生出使用模型视图控制器(MVC)架构建立快速应用开发(RAD)框架的市场需求。

    2.1K30

    Nest.js 实战 (八):基于 JWT 的路由身份认证鉴权

    身份验证身份认证是大多数应用程序的重要组成部分,有很多不同的方法和策略来处理身份认证。当前比较流程的是JWT 认证,也叫令牌认证,今天我们探讨一下在 Nest.js 中如何实现。...认证流程客户端将首先使用用户名和密码进行身份认证认证成功,服务端会签发一个 JWT 返回给客户端该 JWT 在后续请求的授权头中作为 Bearer Token 发送,以实现身份认证JWT 认证策略 1、...我们将使用在 API 请求的授权头中提供token的标准方法 jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),...在需要鉴权的 Controller 控制器中使用:import { Controller, UseGuards } from '@nestjs/common';import { AuthGuard }...总结关注我,我们一起领略 Nest.js 的魅力Github:nest-server

    21920
    领券