我有一个Azure移动后端设置,使用简单的身份验证进行Facebook和谷歌身份验证,它按预期工作。
每次用户使用任何受支持的提供商登录时,我都希望能够验证它是否是新用户(电子邮件不在数据库中),而无需从客户端拨打其他电话。这可能吗?
答案 0 :(得分:1)
每次用户使用任何受支持的提供商登录时,我都希望能够验证是否是新用户(电子邮件不在数据库中),而无需从客户端进行额外调用。这可能吗?
据我所知,我们无法直接验证是否是新用户。
无论您使用服务器流还是客户端流,轻松验证只会返回访问令牌,以便客户端访问移动后端资源,它不会检查用户是新的还是旧的。
如果你想达到这个要求,你需要编写自己的逻辑。
您可以在用户成功登录后编写代码。
例如,facebook登录。
如果您使用登录成功,您可以调用GetAppServiceIdentityAsync扩展方法来获取登录凭据,其中包括针对Facebook Graph API发出请求所需的访问令牌。
// Get the credentials for the logged-in user.
var credentials =
await this.User
.GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);
if (credentials.Provider == "Facebook")
{
// Create a query string with the Facebook access token.
var fbRequestUrl = "https://graph.facebook.com/me/feed?access_token="
+ credentials.AccessToken;
// Create an HttpClient request.
var client = new System.Net.Http.HttpClient();
// Request the current user info from Facebook.
var resp = await client.GetAsync(fbRequestUrl);
resp.EnsureSuccessStatusCode();
// Do something here with the Facebook user information.
var fbInfo = await resp.Content.ReadAsStringAsync();
}
然后您可以根据用户信息检查数据库。
有关如何在服务器端获取用户信息的更多详细信息,请参阅How to: Retrieve authenticated user information。