X30*_*61X 5 facebook-oauth asp.net-mvc-4
我全新到Visual Studio 2012和MVC 4,和我一直在工作SimpleMembershipProvider通过WebMatrix.WebData库.
我想将Facebook作为外部登录源整合,但现在不是必需的.然而,为了获得一个体面的感觉,我一直在遵循这里找到的教程和指南 - http://www.asp.net/mvc/tutorials/mvc-4/using-oauth-providers-with -mvc.
我的问题 :
如果已使用以下方法创建用户:
WebSecurity.CreateUserAndAccount(model.Email, model.Password);
WebSecurity.Login(model.Email, model.Password);
Run Code Online (Sandbox Code Playgroud)
oAuthMemebership如果他们选择使用他们的Facebook凭据而不是他们在首次注册时创建的电子邮件和密码,他们可以在未来"升级"到帐户吗?
我在指南或其他地方找不到这个问题的明确答案,所以我希望有人可以澄清这个过程是如何起作用的.
SimpleMembership设置允许本地和多个OAuth登录共享相同UserProfile- 因此单个用户可以使用本地密码或FacebOogLiveWitter登录.
(我应该说,我在这个答案中假设OAuth提供商不会发回本地帐户的匹配信息.如果他们这样做,那么实际执行合并的原则是相同的,但复杂性和步骤大大减少.)
OAuth注册过程将拒绝用户使用现有用户名,而不是尝试合并两个帐户.因此,这并不简单,您必须自己构建功能.这个过程非常复杂,因为用户可以通过许多方向来解决这个问题(因此您可以通过仅支持一个或两个来简化),并且您需要强制执行安全性以防有人试图合并到他们不拥有的帐户中.
我将假设您对所发布的链接感到满意,并且您已经关注Facebook帮助(例如)Facebook登录和Web登录流程(没有JavaScript SDK),因此您有一个有效的测试应用程序.
您的一般流程必须具有多个用户旅程方法才能对用户有意义:
等等
请求许可
(如果OAuth提供商已发送回匹配的识别信息,例如电子邮件地址,则可以跳过此步骤.
您应该通过发送到合并目标帐户的电子邮件确认来强制执行确认安全性.除此以外:
因此,一旦合并"请求",您需要请求允许从合并的目标帐户继续.
MVC 4 AccountController
我将使用Facebook作为我们的OAuth示例.要比较在本地身份验证框架和OAuth上注册用户时发生的情况:
现在让我们来看看当用户第一次使用Facebook登录时会发生什么:
/Account/ExternalLoginCallbackOAuthWebSecurity.SerializeProviderUserId 被调用,将OAuth详细信息传递给该Action/Account/ExternalLoginConfirmation并要求为您在网站上的新展示提供用户名通过匹配一些独特的信息,您可以通过此流程"加入"帐户.只要您UserId在UserProfile,webpages_Membership和webpages_OAuthMembership中使用相同的内容,您就可以了.所以我们必须在这一点上拦截这个过程/Account/ExternalLoginConfirmation.
如果OAuth提供程序已发送回匹配的标识信息(例如电子邮件地址),则此操作变得简单,在ExternalLoginConfirmation操作中对此进行测试,并使用与下面概述的类似过程自动合并.
但是,我认为您不能/不应该假设用户为您的网站和OAuth使用相同的电子邮件地址,(您也不应该出于多种原因).此外,可能在FacebOogLiveWitter之类的条款和条件下,它会阻止你要求他们的帐户的电子邮件,如果他们目前没有,他们可能在将来.
因此,您可以根据用户名,电子邮件地址或电话号码等替代方案关联帐户.无论哪种方式,您都需要他们输入一些对帐户唯一的识别信息,并将撤回目标帐户.
包起来
所以把这一切放在一起:在这个答案的第一部分,我概述了如何考虑多个用户旅程来合并帐户.我将使用示例4.1.
您的流程需要:
(假设 - 当用户首次向本地帐户注册时,您要求他们提供电子邮件地址并对其进行验证或假设其有效)
Account/ExternalLoginConfirmation问他们是否愿意
而不是将它们发送到登录页面,我会在确认消息旁边给他们登录选项.
| 归档时间: |
|
| 查看次数: |
3382 次 |
| 最近记录: |