ASP.NET MVC Identity Google通过GetExternalLoginInfo提供的AccessToken访问用户配置文件

时间:2016-12-25 15:11:53

标签: c# asp.net asp.net-mvc asp.net-mvc-4 google-api

我正在使用Facebook&谷歌登录我的MVC应用程序。 对于Facebook来说,登录并获取有关用户工作良好的数据。谷歌登录也正常工作,它符合我的方法" ExternalLoginCallback"这是我收到AccessToken的地方。

但是 - 我没有找到任何简单的nuget包作为" FacebookClient",我可以在其中传递AccessToken,我可以获得有关已记录用户的更多信息,我希望将它们存储到DB。

我找到了谷歌的其他东西:Google.Apis.Plus.v1我需要再次传递clientId,使用X509Certificate2传递secreatId nad凭据,所以我的问题是是否有任何简单的方式提供" FacebookClient&#34 ;。如果没有,请您描述如何检索有关登录用户的信息?谢谢。

[AllowAnonymous]
public ActionResult Login(string provider)
{
    HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties
    {
        RedirectUri = Url.Action("ExternalLoginCallback")
    }, provider);

    return new HttpUnauthorizedResult();
}

[AllowAnonymous]
public ActionResult ExternalLoginCallback()
{            
    var externalLoginInfo = HttpContext.GetOwinContext().Authentication.GetExternalLoginInfo();
    var accessToken = externalLoginInfo.ExternalIdentity.Claims.FirstOrDefault(x => x.Type == "FacebookAccessToken")?.Value;

    // HERE I WOULD LIKE TO HAVE FUNCTIONALITY SIMILAR TO FacebookClient
    var client = new FacebookClient(accessToken);
    dynamic facebookData = client.Get("me", new { fields = "email,name,first_name,last_name,gender,locale" });
}

1 个答案:

答案 0 :(得分:0)

最后我找到了如何做的方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFSIZE 20
#define NAMESTRLEN 10

void separate(char buffer[], char firstname[], char lastname[]);

int
main(void) {
    char buffer[BUFFSIZE], firstname[NAMESTRLEN], lastname[NAMESTRLEN];
    size_t slen;

    printf("Enter first and last name: ");
    if (fgets(buffer, BUFFSIZE, stdin) == NULL) {
        printf("Error reading into buffer.\n");
        exit(EXIT_FAILURE);
    }  

    slen = strlen(buffer);
    if (slen > 0) {
        if (buffer[slen-1] == '\n') {
            buffer[slen-1] = '\0';
        } else {
            printf("Exceeded buffer length: %d.\n", BUFFSIZE);
            exit(EXIT_FAILURE);
        }
    }

    if (!*buffer) {
        printf("Nothing entered.\n");
        exit(EXIT_FAILURE);
    }

    separate(buffer, firstname, lastname);

    printf("Firstname = %s\n", firstname);
    printf("Lastname = %s\n", lastname);

    return 0;
}

void
separate(char buffer[], char firstname[], char lastname[]) {
    int i;
    char *last;
    const char sep = ' ';

    for (i = 0; buffer[i] != sep; i++) {
        firstname[i] = buffer[i];
    }
    firstname[i] = '\0';

    last = strchr(buffer, sep);
    last++;

    strcpy(lastname, last);
}