예제 #1
0
        public async Task <IActionResult> YenidenKodGonder(string eposta)
        {
            return(await HataKontrolluDondur <Task <IActionResult> >(async() =>
            {
                if (string.IsNullOrEmpty(eposta))
                {
                    return Ok(Sonuc.Basarisiz(new Exception("yanlış bilgi")));
                }
                Kullanici user = null;
                user = await userManager.KullaniciyiGetirEpostayaGore(eposta);
                if (user == null)
                {
                    return Ok(Sonuc.Basarisiz(new Exception("yanlış bilgi")));
                }
                if (user.Email != eposta)
                {
                    return Ok(Sonuc.Basarisiz(new Exception("yanlış bilgi")));
                }

                await EPostaAktivasyonKoduPostala(user);

                return Ok(Sonuc.Tamam);
            }));
        }
        public async Task <IActionResult> Facebook([FromBody] FacebookAuthDto model)
        {
            // 1.generate an app access token
            var appAccessTokenResponse = await Client.GetStringAsync($"https://graph.facebook.com/oauth/access_token?client_id={_fbAuthSettings.AppId}&client_secret={_fbAuthSettings.AppSecret}&grant_type=client_credentials");

            var appAccessToken = JsonConvert.DeserializeObject <FacebookAppAccessToken>(appAccessTokenResponse);
            // 2. validate the user access token
            var userAccessTokenValidationResponse = await Client.GetStringAsync($"https://graph.facebook.com/debug_token?input_token={model.AccessToken}&access_token={appAccessToken.AccessToken}");

            var userAccessTokenValidation = JsonConvert.DeserializeObject <FacebookUserAccessTokenValidation>(userAccessTokenValidationResponse);

            if (!userAccessTokenValidation.Data.IsValid)
            {
                return(BadRequest(Errors.AddErrorToModelState("login_failure", "Invalid facebook token.", ModelState)));
            }

            // 3. we've got a valid token so we can request user data from fb
            var userInfoResponse = await Client.GetStringAsync($"https://graph.facebook.com/v2.8/me?fields=id,email,first_name,last_name,name,gender,locale,birthday,picture&access_token={model.AccessToken}");

            var facebookUserInfo = JsonConvert.DeserializeObject <FacebookUserData>(userInfoResponse);

            // 4. ready to create the local user account (if necessary) and jwt
            var user = await _userManager.KullaniciyiGetirEpostayaGore(facebookUserInfo.Email);

            string mesaj = string.Empty;

            if (user == null)
            {
                user = new Kullanici()
                {
                    UserName        = facebookUserInfo.Email,
                    Email           = facebookUserInfo.Email,
                    EmailConfirmed  = false,
                    YaratilmaTarihi = DateTime.Now,
                    Pasif           = true,
                    Yonetici        = false,
                    FacebookId      = facebookUserInfo.Id,
                    //FaceBookPictureUrl = userInfo.Picture.Data.Url
                };
                user.Kisi = new KullaniciKisi
                {
                    Unvan      = "Doç.Dr.",
                    Ad         = facebookUserInfo.FirstName,
                    Soyad      = facebookUserInfo.LastName,
                    CinsiyetNo = 1,

                    DogumTarihi = new DateTime(1970, 11, 15)
                };
                KisiyeFacebookFotografiEkle(facebookUserInfo, user);
                var result = await _userManager.CreateAsync(user, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8));

                if (!result.Succeeded)
                {
                    return(Ok(Sonuc.Basarisiz(new Hata[] { new Hata {
                                                               Kod = "", Tanim = "Facebook bilgileriyle kullanıcı yaratılamadı!"
                                                           } })));
                }
                else
                {
                    mesaj = "Facebook kullanıcısı yaratıldı. Hesabınız onay sürecinde. Lütfen Eposta adresinizi kontrol ediniz.";
                }
            }
            else
            {
                bool kayitGerekli = false;
                if (user.FacebookId == null || user.FacebookId != facebookUserInfo.Id)
                {
                    //user.Pasif = true;
                    //user.EmailConfirmed = false;
                    if (facebookUserInfo.Gender == "male")
                    {
                        user.Kisi.CinsiyetNo = 1;
                    }
                    else if (facebookUserInfo.Gender == "female")
                    {
                        user.Kisi.CinsiyetNo = 2;
                    }

                    kayitGerekli = true;
                }

                var facebookFotograflari = user.Kisi.Fotograflari.Where(f => f.DisKaynakId == "facebook").ToList();
                var facebookFotografiYok = facebookFotograflari != null && !facebookFotograflari.Any(fb => fb.Url == facebookUserInfo.Picture.Data.Url);

                var suankiProfilFotografi = user.Kisi.Fotograflari.SingleOrDefault(f => f.ProfilFotografi);
                if (suankiProfilFotografi != null)
                {
                    suankiProfilFotografi.ProfilFotografi = false;
                    kayitGerekli = true;
                }

                if (facebookFotografiYok)
                {
                    KisiyeFacebookFotografiEkle(facebookUserInfo, user);
                    kayitGerekli = true;
                }


                if (kayitGerekli)
                {
                    var degistirmeSonuc = await _userManager.UpdateAsync(user);

                    if (!degistirmeSonuc.Succeeded)
                    {
                        return(Ok(Sonuc.Basarisiz(new Hata[] { new Hata {
                                                                   Kod = "", Tanim = "Facebook bilgileriyle kullanıcı kaydedilemedi!"
                                                               } })));
                    }
                    else
                    {
                        mesaj = "Facebook bilgileriyle kullanıcı var olan kullanıcı ilişkilendirildi. Hesabınızı onaylanması gerekli. Lütfen eposta adresinizi kontrol ediniz.";
                    }
                }
            }

            // generate the jwt for the local user...
            var localUser = await _userManager.KullaniciyiGetirEpostayaGore(facebookUserInfo.Email);



            if (localUser == null)
            {
                return(Ok(Sonuc.Basarisiz(new Hata[] { new Hata {
                                                           Kod = "Giris Başarısız", Tanim = "Facebook bilgileriyle lokal kullanıcı hesabı yaratılamadı!"
                                                       } })));
            }

            var girisYapabilirSonuc = await signInManager.CanSignInAsync(localUser);

            if (girisYapabilirSonuc)
            {
                if (!localUser.EmailConfirmed)
                {
                    //Eposta konfirme etme süreci başlasın
                }
            }
            if (!localUser.Pasif)
            {
                //Aktifleştirme süreci başlasın
            }

            var jwt = await Tokens.GenerateJwt(_jwtFactory.GenerateClaimsIdentity(localUser),
                                               _jwtFactory, localUser.UserName, _jwtOptions);

            var kullaniciDto = user.ToKullaniciBilgi();

            var sonuc = KayitSonuc <object> .IslemTamam(new { tokenString = jwt, kullanici = kullaniciDto });

            sonuc.Mesajlar[0] = $"Hoşgeldiniz {kullaniciDto.TamAdi}!";
            sonuc.Mesajlar.Add(mesaj);
            return(Ok(sonuc));
        }