Devise是一个用于身份验证和用户管理的流行Ruby on Rails插件,而JWT(JSON Web Token)是一种用于在不同系统之间传输安全信息的标准。在Versioned API Rails控制器中同时使用Devise和JWT可以实现用户认证和授权。
下面是一种实现方式:
bundle install
来安装这些依赖:gem 'devise'
gem 'devise-jwt'
rails generate devise:install
rails generate devise User
这将生成一个名为User的模型,并生成与Devise相关的配置文件。
:jwt_authenticatable
模块替代默认的:database_authenticatable
模块。这将允许用户通过JWT进行认证。确保在模型中添加以下内容:class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:jwt_authenticatable, jwt_revocation_strategy: JWTBlacklist
end
JWTBlacklist
的新文件,并添加以下内容:class JWTBlacklist < ApplicationRecord
include Devise::JWT::RevocationStrategies::Blacklist
self.table_name = 'jwt_blacklist'
end
这将创建一个与Devise关联的黑名单,用于使过期的JWT无效。
config/initializers/devise.rb
中添加以下内容来配置JWT: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的密钥、请求路径和过期时间等信息。
class Api::V1::YourController < ApplicationController
before_action :authenticate_user!
respond_to :json
# 其他操作方法...
end
这将在Versioned API Rails控制器中启用身份验证,并将其限制为只允许经过身份验证的用户访问。
这样,当用户访问Versioned API Rails控制器时,Devise和JWT将一起工作。用户在登录时将获得一个JWT令牌,然后在每个请求中将该令牌添加到请求头中进行身份验证和授权。你可以使用其他适合你的方法来处理这些请求头。
除了这些步骤,还有一些其他的配置和定制化选项可供参考,比如添加注册、密码重置等功能。更多细节可以参考Devise和JWT的官方文档。
希望这个回答对你有所帮助!如果你需要更多关于云计算或其他相关领域的帮助,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云