Ios 为使用电子邮件和facebook\u id的web和移动设备创建用户创建/验证系统
我正在使用RubyonRails为iOS应用程序和web应用程序(即用户可以从移动应用程序或web前端创建)编写一个用户创建系统。我对使用像Desive这样的系统不感兴趣 我已经好几年没有这样做了,所以我只想确保我的想法是最新的,有意义的 步骤/假设Ios 为使用电子邮件和facebook\u id的web和移动设备创建用户创建/验证系统,ios,facebook,authentication,Ios,Facebook,Authentication,我正在使用RubyonRails为iOS应用程序和web应用程序(即用户可以从移动应用程序或web前端创建)编写一个用户创建系统。我对使用像Desive这样的系统不感兴趣 我已经好几年没有这样做了,所以我只想确保我的想法是最新的,有意义的 步骤/假设 我们将通过自定义HTTP字段(如“X-auth_令牌”)管理服务器和客户端之间的状态 它们可以通过电子邮件/密码凭据或facebook创建 在电子邮件登录的情况下,用户只需发布以下json: { user:{ email:'joe@te
{
user:{
email:'joe@test.com',
password:'testpassword',
}
}
我将使用Rails has_secure_password来散列这些值
而且还会回来
{
user:{
id:23,
auth_token:'md5value',
}
}
对于web,我们将把auth_令牌作为cookie值传递。对于iOS应用程序,auth_令牌将作为自定义HTTP头字段传递,例如“X-auth_令牌”
{
用户:{
facebook登录:对吗,
fb_电子邮件:'joe@test.com',
fb_auth_标记:“AbigValue FromFB”
}
}
在服务器上,我们将确保他们通过
给facebook打电话
def self.verify_facebook fb_auth_token
result = Net::HTTP.get(URI.parse("https://graph.facebook.com/me?access_token=#{fb_auth_token}"))
obj=JSON.parse(result)
obj["email"]
end
以及验证初始请求中发送的fb_电子邮件是否与facebook提供的电子邮件相对应
以下是带有相应图表的步骤:
台阶
{
user:{
id:23,
auth_token:'md5value',
}
}
iOS应用程序将通过将auth_令牌写入密钥链
上述场景对于用户创建是否合理 你描述的所有想法对我来说都是有效的,但整个描述看起来不完整 缺失的部分包括:
- 您如何存储和识别用户
- 如何存储身份验证令牌李>
- 一个用户可以有多个令牌吗
- 您想让旧代币过期吗
users
table:
- ID—应用程序数据库中唯一的整数用户ID
- 电子邮件-字符串,可选(facebook可能不存在),表中唯一
- facebook_id-字符串,可选(对于通过电子邮件注册的用户将不存在),在表中唯一
- 密码-字符串,可选(facebook用户无密码)
- 用户通过电子邮件注册,我们有ID和电子邮件
- 用户在facebook上注册/登录并提供电子邮件
- 我们会检查拥有此类电子邮件的用户是否已经存在,并为其设置facebook\u id
- 现在用户可以通过facebook或电子邮件登录
users
表中已经有电子邮件,我们可以忽略此更改。因此,用户仍然可以使用他的旧电子邮件登录。(或者,使用其他登录历史记录,我们可以检查用户是否从未使用电子邮件登录,并用新的电子邮件替换)
为facebook用户提供生成密码
功能也很容易。他们可以在登录时输入电子邮件并生成密码,因此将来也可以使用电子邮件/密码登录
您还可以添加忘记密码
功能,该功能可以生成新密码并将其发送到用户的电子邮件中-这可供电子邮件
用户和提供电子邮件的facebook
用户使用
如果我理解正确,您希望有一个统一的方法来创建新用户和验证现有用户,如下所示:
- 用户输入,应用程序向后端发送电子邮件和密码
- 检查是否存在具有此类电子邮件的用户
- 用户存在-验证密码
- 已通过-发送访问令牌
- 失败-发送错误
- 用户不存在-创建新用户和令牌
- 发送访问令牌
您还可以考虑使用独立的后端端点——一个登记新用户,另一个登录现有用户。 因为按照上面的过程,如果用户错误地键入了他的电子邮件,您将创建一个新用户,这是不期望的。 对于facebook来说,注册/登录可能没有多大区别
我假设允许一个用户有多个auth令牌从不同的位置登录是有用的,因此下面是令牌
表:
- ID-整数,唯一ID,主键
- 令牌字符串,唯一的访问令牌(您可以考虑将其作为主键)
- user_id-整数,对拥有令牌的用户的引用
- 创建时间-日期时间,创建日期
- expired-布尔值,可用于实现令牌过期
- 有一个带有X-auth_令牌的请求
- 在数据库中查找令牌