Devise-Passkeys 开源项目教程
1. 项目介绍
Devise-Passkeys 是一个Devise扩展,它允许您使用密钥而不是密码进行用户身份验证。这个扩展轻量级且不可配置,它会完成它需要做的事情,同时留下一些手动实现的步骤给您。
2. 项目快速启动
首先,您需要在应用的 Gemfile 中添加以下代码:
gem 'devise-passkeys'
然后执行以下命令安装依赖:
$ bundle
接下来,在您的用户模型中添加 :passkey_authenticatable 方法:
class User < ApplicationRecord
devise :passkey_authenticatable, ...
has_many :passkeys
def self.passkeys_class
Passkey
end
def self.find_for_passkey(passkey)
self.find_by(id: passkey.user.id)
end
def after_passkey_authentication(passkey:)
# 在这里添加您希望在通过密钥认证后执行的代码
end
end
您还需要创建一个用于存储密钥的模型。运行以下命令生成模型:
rails g model Passkey user:references label:string external_id:string:index:uniq public_key:string:index sign_count:integer last_used_at:datetime
确保在 Passkey 模型中包含以下字段:
label:string(必需,不能为空)external_id:string(必需)public_key:string(必需)sign_count:integer(必需)last_used_at:datetime(推荐)
并且建议在 external_id 和 public_key 上添加唯一索引。
3. 应用案例和最佳实践
由于 Devise 尚未内置对密钥的支持,因此您需要自定义控制器和视图。以下是一些步骤:
- 生成自定义 Devise 控制器:
rails generate devise:controllers users
- 生成自定义 Devise 视图:
rails generate devise:views users
- 在您的控制器中包含 Passkeys 的 Concerns:
class UsersController::RegistrationsController < Devise::RegistrationsController
include Devise::Passkeys::Controllers::RegistrationsControllerConcern
end
class UsersController::SessionsController < Devise::SessionsController
include Devise::Passkeys::Controllers::SessionsControllerConcern
end
# 更多自定义代码...
- 添加自定义路由:
devise_for :users, controllers: {
registrations: 'users/registrations',
sessions: 'users/sessions'
}
devise_scope :user do
# 更多路由...
end
- 重新实现
:passkey_authenticatable模块:
Devise.add_module :passkey_authenticatable,
model: 'devise/passkeys/model',
route: { session: [nil, :new, :create, :destroy] },
controller: 'controller/sessions',
strategy: true
4. 典型生态项目
目前 Devise-Passkeys 项目的生态系统中,并没有明确的典型项目列出。不过,您可以参考 Devise-Passkeys 的模板仓库来获取更多实践示例:
https://github.com/ruby-passkeys/devise-passkeys-template
请根据您项目的具体需求,调整上述教程中的代码和步骤。希望这些信息对您有所帮助!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



