如何将多个社交登录映射到单个用户的帐户?

时间:2013-09-13 09:53:29

标签: design-patterns azure oauth identity

我正在使用Azure移动服务创建应用后端。该应用程序利用Azure移动服务身份(Microsoft,Facebook,Google和Twitter)作为其替代登录/注册过程。我在用户第一次登录时创建新的用户个人资料,然后如果用户使用不同的社交身份登录,我想自动将其链接到用户现有的个人资料/帐户。

将多个社交身份链接到单个用户时使用的常见模式或最佳做法是什么?

我正在考虑使用的方法是:

当用户使用社交身份登录时,我使用移动服务服务器脚本中的用户对象的 getIdentities()函数来返回具有提供者特定数据(userId和accessToken)的对象。然后我使用用户accessToken从社交API中检索用户的电子邮件地址。

收到用户的电子邮件后,请检查数据库中是否存在电子邮件地址,以及是否与其他userId(例如Twitter:userId)相关联,然后链接当前用户对象的userId(例如, Facebook:userId)到帐户。

如何将“登录范围”添加到请求允许我获取用户电子邮件地址的移动服务身份?(例如,Facebook的' / me?scope = email < / EM>')

这是一个合适的解决方案,我应该考虑使用此方法的哪些问题?

1 个答案:

答案 0 :(得分:0)

获取用户电子邮件地址的唯一方法是在电子邮件字段上请求扩展权限。用户必须允许您查看此内容,并且无法获取用户朋友的电子邮件地址。

http://developers.facebook.com/docs/authentication/permissions

如果您通过在调用Auth对话框的get字符串中传递scope = email来使用Facebook连接,则可以执行此操作。

我建议使用SDK而不是file_get_contents,因为它可以更轻松地执行Oauth身份验证。

实时版本在此处:http://facebook.init.me/php-get-email-address

    <?php

$facebook = new Facebook(array(
  'appId'  => $initMe["appId"],
  'secret' => $initMe["appSecret"],
));

$facebook->setAccessToken($initMe["accessToken"]);
$user = $facebook->getUser();

if ($user) {
    $user_profile = $facebook->api('/me');
    print_r($user_profile["email"]);
}

&GT;

如果您使用的是Windows手机,则可以访问手机令牌,以便您知道登录来自同一部手机。 Scrool to PrimaryToken http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769509(v=vs.105).aspx