gpt4 book ai didi

database-design - 在数据库中存储 OpenID 信息

转载 作者:行者123 更新时间:2023-12-04 12:01:49 24 4
gpt4 key购买 nike

这是一个数据库问题。我已经安装并运行了一个 openid 库。

我想在我正在处理的网站上使用 OpenID。共有三种类型的用户。

  • 使用电子邮件/密码进行身份验证的命名帐户
  • 使用 OpenID 进行身份验证的命名帐户
  • 匿名账户使用 OpenID 进行身份验证

  • 所有这些用户都存储在同一个表中,以简化评论表。命名帐户链接到该帐户可以管理的博客。匿名用户可以对博客上的文章发表评论,但他们不能做任何其他事情。如果匿名用户注册了一个帐户,我想自动将该用户的旧评论转移到指定帐户。我目前正在通过让用户填写具有唯一名称和有效电子邮件的表单来执行此操作。

    目前,两组帐户都使用以下架构存储在同一个表中。 (是的,这是一个 Rails 迁移)
    create_table :users do |t|
    t.string :name #unique because it maps to a subdomain
    t.string :openid_url #unique
    t.string :email #unique
    t.string :password_hash
    t.string :password_salt
    t.boolean :guest #Anonymous user flag

    t.timestamps
    end

    ( openid_url 是唯一的,以防止多个帐户附加到同一个 openid。 email 是唯一的,因为用户使用电子邮件/密码登录)

    我正在使用此设置我遇到了 Google 的 OpenID 实现问题。每个使用 Google for OpenID 的用户都有相同的 URL: https://www.google.com/accounts/o8/ud .

    我如何支持使用 google 作为 openid 提供程序,因为它的 url 对于每个用户都不是唯一的? (请记住存在的限制)

    注意:Google 帐户可以使用互联网上任何有效的电子邮件地址,因此我不能只将 person@google.com 存储在 openid_url 字段中,因为电子邮件可能是 person@example.com 或更糟的 person@yahoo.com!雅虎也使用这种单一的 url 方法,所以我也必须支持它们。

    最佳答案

    存储 openid.claimed_id 值。每个用户都是唯一的。 Google OpenID 确实是独一无二的。它们都以相同的值开头,但它们具有唯一的 ?id=uniquenesshere查询字符串。请记住,这些值应被视为区分大小写,因此在查找用户时保留大小写并匹配大小写。

    由于您给出的原因,您绝对不希望电子邮件地址是唯一的,而且对于大多数提供商来说,电子邮件地址没有预先验证(或者您不能相信提供商已经这样做了),因此存储在电子邮件中地址是让您的用户身份被盗的可靠方法。

    关于database-design - 在数据库中存储 OpenID 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537949/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com