4

我有一个使用 Sinatra、Datamapper 构建的基本 Ruby 应用程序,并使用 OAuth 进行用户身份验证。当我从 Oauth 服务收到数据时,我将新用户的记录保存在 sqlite3 数据库中。

我不知道该怎么做是如何去验证用户数据库表中不存在用户记录。我可以使用用户的唯一 id (uid) 来交叉检查 uid 是否已存储,但我不确定在哪里执行此操作。

我有 2 个课程和一个/callback路线。User类是 db 模型,Authentication类具有连接到 OAuth的各种方法,以及将调用 Authentication.save 方法的/callback路由。

我应该在Authentication.save方法中检查现有记录并返回布尔值或其他内容吗?在Authentication中创建一个类似于 Authentication.exists 的新方法?(那会是什么样子?)或者我应该在/callback路由中进行检查?

如果这不是 100% 清楚,我深表歉意,我很难描述我的问题,而且我是一个绝对的 Ruby 初学者......

4

1 回答 1

2

在创建新用户之前,您应该尝试检查是否存在具有相同登录名和电子邮件(例如)的用户:

require 'dm-aggregates'

user=User.new
user.login=your_login_data_returned_by_oauth
user.email=your_email_data_returned_by_oauth
# And so on...
user.save if User.count(:login=>user.login, :email=>user.email) == 0
于 2009-11-18T10:15:30.213 回答