将设计身份验证合并到现有的用户结构中?

2024-02-19

我有一个功能齐全的身份验证系统,其中的用户表有超过五十列。它很简单,但它使用盐进行哈希加密,使用电子邮件而不是用户名,并且还有两种不同类型的用户和管理员。

我希望将 Devise 身份验证合并到我的应用程序中,以增强额外的部分,例如电子邮件验证、忘记密码、记住我的令牌等...我只是想看看是否有人在合并时有任何建议或遇到的问题设计现有的用户结构。我的用户模型中的基本字段是:

  t.string    :first_name, :null => false
  t.string    :last_name, :null => false
  t.string    :email, :null => false
  t.string    :hashed_password
  t.string    :salt
  t.boolean   :is_userA, :default => false
  t.boolean   :is_userB, :default => false
  t.boolean   :is_admin, :default => false
  t.boolean :active, :default => true
  t.timestamps

作为参考,以下是迁移中的设计字段:

  t.database_authenticatable :null => false
  t.confirmable
  t.recoverable
  t.rememberable
  t.trackable

  add_index "users", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true
  add_index "users", ["email"], :name => "index_users_on_email", :unique => true
  add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true

最终变成模式中的这些实际字段:

t.string   "email",                               :default => "", :null => false
t.string   "encrypted_password",   :limit => 128, :default => "", :null => false
t.string   "password_salt",                       :default => "", :null => false
t.string   "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string   "reset_password_token"
t.string   "remember_token"
t.datetime "remember_created_at"
t.integer  "sign_in_count",                       :default => 0
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"

你们有什么推荐?我是否只需从迁移中删除电子邮件、散列密码和盐,然后放入 5 个 Devise 迁移字段,一切都会正常,还是我需要做其他事情?

EDIT:

我自己已经开始尝试这一点,并且已经遇到了一些问题。我将上面显示的设计迁移字段添加到现有的用户模型中,现在当我运行种子文件时,它会给出以下 Postgresql 错误:

ERROR: duplicate key value violates unique constraint "index_users_on_email"

我的种子文件:

initial_usersA = User.create!(
[
{
    :first_name => "John", 
    :last_name => "Doe",
    :email => "[email protected] /cdn-cgi/l/email-protection",
    :is_userA => true,
    :is_userB => false,
            :is_admin => true,
    :password => "password",
    :password_confirmation => "password"
},
{
    :first_name => "Jane", 
    :last_name => "Smith",
    :email => "[email protected] /cdn-cgi/l/email-protection",
    :is_userA => true,
    :is_userB => false,
            :is_admin => true,
    :password => "password",
    :password_confirmation => "password"
}

用户模型:

devise :registerable, :authenticatable, :recoverable,
     :rememberable, :trackable, :validatable
attr_accessor :password_confirmation, :email, :password

堆栈跟踪显示,出于某种原因,电子邮件显然没有与其余变量一起输入...尽管种子文件中的其他所有内容都显示在实际查询中,但由于某种原因,电子邮件是“”它是明确定义的。auth


我记得我们在做类似事情时面临的两个主要考虑因素是:

数据库迁移 - 而不是使用t.database_authenticatable帮助者,我们写了个人add_column and rename_column语句,这样我们就不会遇到您所看到的任何重复列或索引错误,这样我们就可以在 Devise 中重用盐和哈希密码,而无需修改 gem 的工作方式。

第二个也是更大的考虑因素是我们使用的散列算法与 Devise 提供的任何散列算法不同,因此我们必须编写自己的加密器类作为Devise::Encryptors::Base,并使用我们自己的逻辑实现摘要函数。最后,我们通过在适当的配置/初始化文件中指定它来配置 Devise 使用此加密器config.encryptor = :our_own_algorithm

我希望这足以让您开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将设计身份验证合并到现有的用户结构中? 的相关文章

  • 为什么我需要 Nginx 和 Puma?

    我正在将 Rails 应用程序部署到生产环境中 看起来 Puma 速度很快 可以处理我想要在网络服务器中完成的许多事情 我想知道我是否需要使用 Nginx 如果只使用 Puma 我会错过什么 Nginx 是一个 Web 服务器 puma 是
  • Rails 3 best_in_place 编辑在不刷新页面的情况下无法工作

    我从Bernat的博客rails迷你教程中获取了评论代码 我尝试使用他的 best in place gem 添加就地编辑功能 在大多数情况下它工作正常 我的代码部署在http falling spring 3964 herokuapp c
  • 捆绑包安装无法离线工作

    我得到了这个问题 我想已经安装了捆绑器 因为我无法在 RoR 中创建应用程序时捆绑安装 也无法直接在项目中捆绑安装 如果您遇到任何问题并找到解决方案 请帮助我 enter code here run bundle install Fetch
  • 为什么 Rails 应用程序在底部显示数据库信息?

    我创建了一个博客 每当我添加帖子时 帖子索引页面底部总会显示数据库中的记录列表 home html erb 像这样
  • 保护 REST 和 JSON

    我想利用 RESTful 架构构建提供 JSON 数据的 Web 服务 但我只想要我自己的客户端应用程序可以从我的网络服务请求 基本上 我的 Web 服务包含不供公众使用的敏感数据 但我想以这种方式构建它 以便我可以构建连接到我的 Web
  • Rails 3 分页,will_paginate 与 Kaminari

    我的设置 Rails 3 0 9 Ruby 1 9 2 我正在为我的应用程序寻找分页解决方案 发现有一个新的宝石Kaminari与值得信赖的人相比will paginate 看起来像will paginate有一段时间没有更新了 但后来又以
  • 为 Rails 上的 postgresql 创建用户

    我选择 postgresql 作为我的 Rails 数据库 但当我尝试运行 rake db create all 时 我遇到了一个明显常见的错误 即 致命 角色 app 不存在 我找到了两种解决方案 但我不确定哪一种是正确的 有一个网站说
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • 如何使用sunspot_rails gem 搜索相关文章

    我有一个迷你博客应用程序 我希望用户查看与他们在文章显示页面中阅读的内容相关的文章 没有 sunspot rails gem 我会做这样的事情 在我的模型中 def self related search query join AND fi
  • Gem 在 irb 中可用,但在 Rails 控制台中不可用

    我正在尝试在我的 Rails 项目中使用 RedCloth gem 当我使用irb我可以加载宝石 require rubygems require RedCloth 它工作正常 但是当我在 Rails 控制台中尝试相同的操作时 我收到一条错
  • 查找 Rails 应用程序中未使用的代码

    如何查找正在运行和未运行的代码生产中 该应用程序经过充分测试 但还有很多测试unused代码 因此 他们在运行测试时得到覆盖 我想重构并清理这个烂摊子 它一直在浪费我的时间 我有很多后台工作 这就是为什么我希望生产环境来指导我 在 Hero
  • 使用 OWIN Ws-Federation 包针对 ADFS 3.0 进行身份验证

    我有一个MVC内网站点 需要使用AD帐户进行身份验证 我设置了 ADFS 3 0 Windows Server 2012 R2 并遵循this http www cloudidentity com blog 2014 02 12 use t
  • Angular 2 验证状态

    我使用 Angular 2 实现了一个登录页面 登录后 我从服务器获取 jsonwebtoken userId userRole userName 我将此信息存储在本地存储中 以便我可以随时访问它并在用户刷新页面时保持登录状态 AuthSe
  • Rails: :inverse_of 和关联扩展

    我有以下设置 class Player lt ActiveRecord Base has many cards inverse of gt player do def in hand find all by location hand en
  • 关联的验证错误消息变得简单

    我的应用程序中有相当多的belongs to关联 其中一些是可选的 即关联可能为零 一些是强制性的 关联必须是有效的父记录 我最初的方法是使用我自己的验证方法来验证给定的 id 此处为强制关联 belongs to category val
  • 使用 Ruby 重命名 S3 中的对象

    我想使用 Ruby sdk 重命名 s3 中的项目 我该怎么做呢 我努力了 require aws sdk s3 AWS config region gt region access key id gt key secret access
  • Rails 中过滤长日志参数

    我允许用户在我的网站上上传文件 其中一些文件可能非常大 并且占用了我的日志文件的很大一部分 所以我不想让它出现 我知道 config filter parameters password 过滤某些参数 但问题是参数位于这样的哈希中 pers
  • Rails CSS 样式表相互覆盖

    我在资产 样式表位置有一个clients css和jobs css 每个都有一个各自的控制器 乔布斯是在客户之后用脚手架创造出来的 scaffolds scss 文件为空 application css 为空 当我编码更改时 例如body
  • 选择的 xpath 父属性

    xml文档的语法

随机推荐