5

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

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

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

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

一旦我有了用户的电子邮件,请检查该电子邮件地址是否存在于数据库中,以及它是否与不同的 userId(例如 Twitter:userId)相关联,然后链接当前用户对象的 userId(例如 Facebook:userId ) 到帐户。

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

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

4

1 回答 1

0

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

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

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

我建议使用 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"]);
}

?>

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

于 2013-09-27T11:31:10.400 回答