Devise-Passkeys 开源项目教程

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_idpublic_key 上添加唯一索引。

3. 应用案例和最佳实践

由于 Devise 尚未内置对密钥的支持,因此您需要自定义控制器和视图。以下是一些步骤:

  1. 生成自定义 Devise 控制器:
rails generate devise:controllers users
  1. 生成自定义 Devise 视图:
rails generate devise:views users
  1. 在您的控制器中包含 Passkeys 的 Concerns:
class UsersController::RegistrationsController < Devise::RegistrationsController
  include Devise::Passkeys::Controllers::RegistrationsControllerConcern
end

class UsersController::SessionsController < Devise::SessionsController
  include Devise::Passkeys::Controllers::SessionsControllerConcern
end

# 更多自定义代码...
  1. 添加自定义路由:
devise_for :users, controllers: {
  registrations: 'users/registrations',
  sessions: 'users/sessions'
}

devise_scope :user do
  # 更多路由...
end
  1. 重新实现 :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),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值