Omniauth从Facebook和Twitter的Scratch进行身份验证

时间:2012-05-23 18:17:57

标签: ruby-on-rails ruby-on-rails-3 authentication omniauth

我使用Hartl的Railstutorial http://ruby.railstutorial.org/chapters/modeling-users#sec:user_model从头创建了我的身份验证。

我想为我的网站项目实施Facebook和Twitter登录。在观看Railscasts Simple Omniauth http://railscasts.com/episodes/241-simple-omniauth?view=comments之后,我正在考虑使用OmniAuth。

在视频中,我们被要求生成用户模型:

rails generate model user provider:string uid:string name:string

uid对Twitter和Facebook的登录是唯一的,还是与我的用户模型中的id属性相同?

简单地说,我是否需要在我的用户模型中添加uid列以实现OmniAuth?

谢谢!

1 个答案:

答案 0 :(得分:2)

UID是facebook或twitter登录的用户ID。它与User模型中的“id”字段不同。

Omniauth使用环境变量来设置哈希。在这个哈希是一个'uid'键,您将用它来在您的数据库中查找您的用户。它还设置了“提供者”键,因此“uid”键和“提供者”键的组合使您能够查找用户记录,例如

auth = request.env["omniauth.auth"]
user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) 

因此,您的模型(用户)需要同时包含'provider'和'uid'列。