コード例 #1
0
 protected void OAuth(EntityUserSocial twitterSocial)
 {
     _client.OAuthUser(twitterSocial.ConsumerKey, twitterSocial.ConsumerSecret, twitterSocial.Token, twitterSocial.TokenSecret);
 }
コード例 #2
0
        public async Task <ApiResponse <AccessTokenModel> > OAuthByTwitter(string token, string verifier, string authorizationId)
        {
            var uModel = _twitterClient.ValidateTwitterAuth(token, verifier, authorizationId);

            if (uModel == null)
            {
                return(null);
            }

            var dbUser = await _userStore.FindByEmailAsync(uModel.Email.ToLower());

            if (dbUser == null)
            {
                dbUser = new EntityUser
                {
                    UserName           = uModel.Email,
                    FirstName          = uModel.ScreenName,
                    LastName           = "",
                    Email              = uModel.Email,
                    PictureUrl         = uModel.ProfileImageUrl400x400,
                    Birthday           = DateTime.UtcNow,
                    Locale             = uModel.Language.ToString(),
                    EmailConfirmed     = true,
                    NormalizedEmail    = uModel.Email.ToLower(),
                    NormalizedUserName = uModel.Email.ToLower()
                };

                await _userStore.CreateAsync(dbUser);

                await _userStore.AddToRoleAsync(dbUser, "user");
            }

            var dbSocial = await _context.UserSocials.FirstOrDefaultAsync(x => x.UserId == dbUser.Id && x.Type == EntityUserSocialType.Twitter && x.ExternalId == uModel.Id);

            if (dbSocial == null)
            {
                dbSocial = new EntityUserSocial
                {
                    ExternalId = uModel.Id,
                    Type       = EntityUserSocialType.Twitter,
                    UserId     = dbUser.Id,
                };

                await _context.UserSocials.AddAsync(dbSocial);

                await _context.SaveChangesAsync();
            }

            dbSocial.Token          = uModel.Credentials.AccessToken;
            dbSocial.TokenSecret    = uModel.Credentials.AccessTokenSecret;
            dbSocial.ConsumerKey    = uModel.Credentials.ConsumerKey;
            dbSocial.ConsumerSecret = uModel.Credentials.ConsumerSecret;
            dbSocial.TokenExpires   = DateTime.UtcNow.AddYears(100);

            _context.UserSocials.Update(dbSocial);
            await _context.SaveChangesAsync();

            var accessToken = await AuthUser(dbUser, EntityUserSocialType.Twitter);

            return(Ok(accessToken));
        }
コード例 #3
0
        public async Task <ApiResponse <AccessTokenModel> > OAuthByFacebook(string fbShortToken)
        {
            var client = GetFacebookClient(fbShortToken);

            object userModelResponse = null;

            try
            {
                userModelResponse = await client.GetTaskAsync("me", new { fields = new[] { "id", "name", "email", "birthday", "picture", "locale", "first_name", "last_name" } });
            }
            catch (Exception e) { }

            var uModel = FacebookParser.Parse <FacebookUserProfileModel>(userModelResponse);

            if (uModel == null)
            {
                return(Failed());
            }

            var dbUser = await _userStore.FindByEmailAsync(uModel.Email.ToLower());

            if (dbUser == null)
            {
                dbUser = new EntityUser
                {
                    UserName           = uModel.Email,
                    FirstName          = uModel.FirstName,
                    LastName           = uModel.LastName,
                    Email              = uModel.Email,
                    PictureUrl         = uModel.Picture.Data.Url,
                    Birthday           = uModel.Birthday,
                    Locale             = uModel.Locale,
                    EmailConfirmed     = true,
                    NormalizedEmail    = uModel.Email.ToLower(),
                    NormalizedUserName = uModel.Email.ToLower()
                };

                await _userStore.CreateAsync(dbUser);

                await _userStore.AddToRoleAsync(dbUser, "user");
            }

            var dbSocial = await _context.UserSocials.FirstOrDefaultAsync(x => x.UserId == dbUser.Id && x.Type == EntityUserSocialType.Facebook && x.ExternalId == uModel.Id);

            if (dbSocial == null)
            {
                dbSocial = new EntityUserSocial
                {
                    ExternalId = uModel.Id,
                    Type       = EntityUserSocialType.Facebook,
                    UserId     = dbUser.Id,
                };

                await _context.UserSocials.AddAsync(dbSocial);

                await _context.SaveChangesAsync();
            }

            // get long live token
            using (HttpClient http = new HttpClient())
            {
                var longTokenResponse = await http.GetAsync($"https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=" + _appData.FacebookAppId + "&client_secret=" + _appData.FacebookAppSecret + "&fb_exchange_token=" + fbShortToken);

                if (!longTokenResponse.IsSuccessStatusCode)
                {
                    return(Failed());
                }

                var longTokenResponseContent = await longTokenResponse.Content.ReadAsStringAsync();

                var facebookToken = JsonConvert.DeserializeObject <FacebookAccessTokenModel>(longTokenResponseContent);

                if (facebookToken == null)
                {
                    return(Failed());
                }

                dbSocial.Token        = facebookToken.AccessToken;
                dbSocial.TokenExpires = DateTime.UtcNow.AddSeconds(facebookToken.ExpiresIn);

                _context.UserSocials.Update(dbSocial);
                await _context.SaveChangesAsync();
            }


            var token = await AuthUser(dbUser, EntityUserSocialType.Facebook);

            return(Ok(token));
        }
コード例 #4
0
 protected void OAuthTwitter(TwitterClient client, EntityUserSocial social)
 {
     client.OAuthUser(social.ConsumerKey, social.ConsumerSecret, social.Token, social.TokenSecret);
 }