Aracılığıyla paylaş


MVC 4 ile OAuth Sağlayıcıları Kullanma

yazan: Tom FitzMacken

Bu öğreticide, kullanıcıların Facebook, Twitter, Microsoft veya Google gibi bir dış sağlayıcıdan gelen kimlik bilgileriyle oturum açmasına ve ardından bu sağlayıcılardan bazı işlevleri web uygulamanıza tümleştirmesine olanak tanıyan bir ASP.NET MVC 4 web uygulaması oluşturma gösterilmektedir. Kolaylık olması için, bu öğretici Facebook'un kimlik bilgileriyle çalışmaya odaklanır.

ASP.NET MVC 5 web uygulamasında dış kimlik bilgilerini kullanmak için bkz. Facebook ve Google OAuth2 ile ASP.NET MVC 5 Uygulaması oluşturma ve OpenID Oturum Açma.

Milyonlarca kullanıcının zaten bu dış sağlayıcılarla hesapları olduğundan, web sitelerinizde bu kimlik bilgilerinin etkinleştirilmesi önemli bir avantaj sağlar. Bu kullanıcılar, yeni bir kimlik bilgileri kümesi oluşturmaları ve hatırlamaları gerekmemesi durumunda sitenize kaydolmaya daha eğilimli olabilir. Ayrıca, bir kullanıcı bu sağlayıcılardan biri aracılığıyla oturum açtıktan sonra, sağlayıcıdan sosyal işlemleri dahil edebilirsiniz.

Oluşturacaklarınız

Bu öğreticide iki ana hedef vardır:

  1. Kullanıcının OAuth sağlayıcısının kimlik bilgileriyle oturum açmasını sağlama.
  2. Sağlayıcıdan hesap bilgilerini alın ve bu bilgileri sitenizin hesap kaydıyla tümleştirin.

Bu öğreticideki örnekler, kimlik doğrulama sağlayıcısı olarak Facebook'un kullanılmasına odaklansa da, kodu sağlayıcılardan herhangi birini kullanacak şekilde değiştirebilirsiniz. Herhangi bir sağlayıcıyı uygulama adımları, bu öğreticide göreceğiniz adımlara çok benzer. Sağlayıcının API kümesine doğrudan çağrı yaparken yalnızca önemli farklılıklar fark edeceksiniz.

Önkoşullar

Veya

Ayrıca, bu konuda ASP.NET MVC ve Visual Studio hakkında temel bilgilere sahip olduğunuz varsayılır. ASP.NET MVC 4'e giriş yapmanız gerekiyorsa bkz. ASP.NET MVC 4'e giriş.

Proje oluşturma

Visual Studio'da yeni bir ASP.NET MVC 4 Web Uygulaması oluşturun ve bunu "OAuthMVC" olarak adlandırabilirsiniz. 4,5 veya 4 .NET Framework hedefleyebilirsiniz.

proje oluşturma

Yeni ASP.NET MVC 4 Projesi penceresinde İnternet Uygulaması'nı seçin ve razor'ı görünüm altyapısı olarak bırakın.

İnternet Uygulaması'nın seçilmesi

Sağlayıcıyı etkinleştirme

İnternet Uygulaması şablonuyla bir MVC 4 web uygulaması oluşturduğunuzda, proje App_Start klasöründe AuthConfig.cs adlı bir dosyayla oluşturulur.

AuthConfig dosyası

AuthConfig dosyası, dış kimlik doğrulama sağlayıcıları için istemcileri kaydetmeye yönelik kod içerir. Varsayılan olarak, bu kod açıklama satırı yapılır, bu nedenle dış sağlayıcıların hiçbiri etkinleştirilmez.

public static class AuthConfig
{
    public static void RegisterAuth()
    {
        // To let users of this site log in using their accounts from other sites such as Microsoft, Facebook, and Twitter,
        // you must update this site. For more information visit https://go.microsoft.com/fwlink/?LinkID=252166

        //OAuthWebSecurity.RegisterMicrosoftClient(
        //    clientId: "",
        //    clientSecret: "");

        //OAuthWebSecurity.RegisterTwitterClient(
        //    consumerKey: "",
        //    consumerSecret: "");

        //OAuthWebSecurity.RegisterFacebookClient(
        //    appId: "",
        //    appSecret: "");

        //OAuthWebSecurity.RegisterGoogleClient();
    }
}

Dış kimlik doğrulama istemcisini kullanmak için bu kodun açıklamasını kaldırmanız gerekir. Yalnızca sitenize eklemek istediğiniz sağlayıcıların açıklamasını kaldırırsınız. Bu öğretici için yalnızca Facebook kimlik bilgilerini etkinleştirebilirsiniz.

public static class AuthConfig
{
    public static void RegisterAuth()
    {
        //OAuthWebSecurity.RegisterMicrosoftClient(
        //    clientId: "",
        //    clientSecret: "");

        //OAuthWebSecurity.RegisterTwitterClient(
        //    consumerKey: "",
        //    consumerSecret: "");

        OAuthWebSecurity.RegisterFacebookClient(
            appId: "",
            appSecret: "");

        //OAuthWebSecurity.RegisterGoogleClient();        
    }
}

Yukarıdaki örnekte yöntemin kayıt parametreleri için boş dizeler içerdiğine dikkat edin. Uygulamayı şimdi çalıştırmayı denerseniz, parametreler için boş dizelere izin verilmediğinden uygulama bir bağımsız değişken özel durumu oluşturur. Geçerli değerler sağlamak için, sonraki bölümde gösterildiği gibi web sitenizi dış sağlayıcılara kaydetmeniz gerekir.

Dış sağlayıcıya kaydolma

Bir dış sağlayıcının kimlik bilgileriyle kullanıcıların kimliğini doğrulamak için web sitenizi sağlayıcıya kaydetmeniz gerekir. Sitenizi kaydettiğinizde, istemciyi kaydederken dahil edilecek parametreleri (anahtar veya kimlik ve gizli dizi gibi) alırsınız. Kullanmak istediğiniz sağlayıcılarla bir hesabınız olmalıdır.

Bu öğretici, bu sağlayıcılara kaydolmak için gerçekleştirmeniz gereken adımların tümünü göstermez. Adımlar genellikle zor değildir. Sitenizi başarıyla kaydetmek için bu sitelerde sağlanan yönergeleri izleyin. Sitenizi kaydetmeye başlamak için geliştirici sitesine bakın:

Sitenizi Facebook'a kaydederken, aşağıdaki resimde gösterildiği gibi site etki alanı ve "http://localhost/" URL için "localhost" sağlayabilirsiniz. localhost'u kullanmak çoğu sağlayıcıyla çalışır, ancak şu anda Microsoft sağlayıcısıyla çalışmaz. Microsoft sağlayıcısı için geçerli bir web sitesi URL'si eklemeniz gerekir.

siteyi kaydet

Önceki görüntüde uygulama kimliği, uygulama gizli dizisi ve kişi e-postası değerleri kaldırılmıştır. Sitenizi gerçekten kaydettiğinizde, bu değerler mevcut olur. Uygulama kimliği ve uygulama gizli dizisi değerlerini uygulamanıza ekleyeceğiniz için not etmek isteyeceksiniz.

Test kullanıcıları oluşturma

Sitenizi test etmek için mevcut bir Facebook hesabını kullanmak sizin için sorun değilse bu bölümü atlayabilirsiniz.

Facebook uygulama yönetimi sayfasında uygulamanız için kolayca test kullanıcıları oluşturabilirsiniz. Sitenizde oturum açmak için bu test hesaplarını kullanabilirsiniz. Sol gezinti bölmesindeki Roller bağlantısına ve Oluştur bağlantısına tıklayarak test kullanıcıları oluşturursunuz.

test kullanıcıları oluşturma

Facebook sitesi, istediğiniz test hesabı sayısını otomatik olarak oluşturur.

Sağlayıcıdan uygulama kimliği ve gizli dizi ekleme

Artık Facebook'tan kimliği ve gizli diziyi aldığınıza göre, AuthConfig dosyasına geri dönün ve bunları parametre değerleri olarak ekleyin. Aşağıda gösterilen değerler gerçek değerler değildir.

public static class AuthConfig
{
    public static void RegisterAuth()
    {
        //OAuthWebSecurity.RegisterMicrosoftClient(
        //    clientId: "",
        //    clientSecret: "");

        //OAuthWebSecurity.RegisterTwitterClient(
        //    consumerKey: "",
        //    consumerSecret: "");

        //OAuthWebSecurity.RegisterFacebookClient(
        //    appId: "",
        //    appSecret: "");

        //OAuthWebSecurity.RegisterGoogleClient();
    }
}

Dış kimlik bilgileriyle oturum açma

Sitenizde dış kimlik bilgilerini etkinleştirmek için yapmanız gereken tek şey bu. Uygulamanızı çalıştırın ve sağ üst köşedeki oturum açma bağlantısına tıklayın. Şablon, Facebook'un sağlayıcı olarak kaydedildiğini otomatik olarak tanır ve sağlayıcı için bir düğme içerir. Birden çok sağlayıcı kaydederseniz, her biri için otomatik olarak bir düğme eklenir.

dış oturum açma

Bu öğreticide, dış sağlayıcılar için oturum açma düğmelerinin nasıl özelleştirileceği ele alınmaz. Bu bilgi için bkz. OAuth/OpenID kullanırken oturum açma kullanıcı arabirimini özelleştirme.

Facebook kimlik bilgileriyle oturum açmak için Facebook düğmesine tıklayın. Dış sağlayıcılardan birini seçtiğinizde, bu siteye yönlendirilirsiniz ve bu hizmet tarafından oturum açmanız istenir.

Aşağıdaki görüntüde Facebook için oturum açma ekranı gösterilmektedir. Facebook hesabınızı oauthmvcexample adlı bir sitede oturum açmak için kullandığınızı not eder.

facebook kimlik doğrulaması

Facebook kimlik bilgileriyle oturum açtıktan sonra, bir sayfa kullanıcıya sitenin temel bilgilere erişeceğini bildirir.

izin isteme

Uygulamaya Git'i seçtikten sonra kullanıcının siteye kaydolması gerekir. Aşağıdaki görüntüde, bir kullanıcı Facebook kimlik bilgileriyle oturum açtıktan sonra kayıt sayfası gösterilmektedir. Kullanıcı adı genellikle sağlayıcıdan bir adla önceden doldurulur.

Facebook hesabınızı bu uygulamayla ilişkilendirebileceğiniz Bir Kaydol sayfasını gösteren ekran görüntüsü.

Kaydı tamamlamak için Kaydet'e tıklayın. Tarayıcıyı kapatın.

Yeni hesabın veritabanınıza eklendiğini görebilirsiniz. Sunucu Gezgini'nde DefaultConnection veritabanını açın ve Tablolar klasörünü açın.

veritabanı tabloları

UserProfile tablosuna sağ tıklayın ve Tablo Verilerini Göster'i seçin.

verileri göster

Eklediğiniz yeni hesabı görürsünüz. webpage_OAuthMembership tablosundaki verilere bakın. Yeni eklediğiniz hesap için dış sağlayıcıyla ilgili daha fazla veri görürsünüz.

Yalnızca dış kimlik doğrulamasını etkinleştirmek istiyorsanız, işiniz bitti. Ancak, aşağıdaki bölümlerde gösterildiği gibi sağlayıcıdan gelen bilgileri yeni kullanıcı kayıt işlemiyle daha fazla tümleştirebilirsiniz.

Ek kullanıcı bilgileri için model oluşturma

Önceki bölümlerde fark ettiğiniz gibi, yerleşik hesap kaydının çalışması için ek bilgi almanız gerekmez. Ancak, dış sağlayıcıların çoğu kullanıcı hakkında ek bilgileri geri geçirir. Aşağıdaki bölümlerde bu bilgilerin nasıl korunup veritabanına kaydedileceğini gösterilmektedir. Özellikle, kullanıcının tam adı, kullanıcının kişisel web sayfasının URI'si ve Facebook'un hesabı doğrulayıp doğrulamadığını gösteren bir değer için değerleri saklarsınız.

ek kullanıcı bilgilerini depolamak üzere bir tablo eklemek için Code First Migrations kullanacaksınız. Tabloyu var olan bir veritabanına ekliyorsunuz, bu nedenle önce geçerli veritabanının anlık görüntüsünü oluşturmanız gerekir. Geçerli veritabanının anlık görüntüsünü oluşturarak, daha sonra yalnızca yeni tabloyu içeren bir geçiş oluşturabilirsiniz. Geçerli veritabanının anlık görüntüsünü oluşturmak için:

  1. Paket Yöneticisi Konsolu'nu açma
  2. enable-migrations komutunu çalıştırın
  3. add-migration initial –IgnoreChanges komutunu çalıştırın
  4. update-database komutunu çalıştırın

Şimdi yeni özellikleri ekleyebilirsiniz. Models klasöründe AccountModels.cs dosyasını açın ve RegisterExternalLoginModel sınıfını bulun. RegisterExternalLoginModel sınıfı, kimlik doğrulama sağlayıcısından gelen değerleri tutar. Aşağıda vurgulandığı gibi FullName ve Link adlı özellikleri ekleyin.

public class RegisterExternalLoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    public string ExternalLoginData { get; set; }

    [Display(Name = "Full name")]
    public string FullName { get; set; }

    [Display(Name = "Personal page link")]
    public string Link { get; set; }
}

Ayrıca AccountModels.cs dosyasına ExtraUserInformation adlı yeni bir sınıf ekleyin. Bu sınıf, veritabanında oluşturulacak yeni tabloyu temsil eder.

[Table("ExtraUserInformation")]
public class ExternalUserInformation
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public string FullName { get; set; }
    public string Link { get; set; }
    public bool? Verified { get; set; }
}

UsersContext sınıfında, yeni sınıf için bir DbSet özelliği oluşturmak için aşağıdaki vurgulanan kodu ekleyin.

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection")
    {
    }

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<ExternalUserInformation> ExternalUsers { get; set; }
}

Artık yeni tabloyu oluşturmaya hazırsınız. Paket Yöneticisi Konsolu'nu yeniden açın ve bu kez:

  1. AddExtraUserInformation add-migration komutunu çalıştırın
  2. update-database komutunu çalıştırın

Yeni tablo artık veritabanında var.

Ek verileri alma

Ek kullanıcı verilerini almanın iki yolu vardır. İlk yol, kimlik doğrulama isteği sırasında varsayılan olarak geri geçirilen kullanıcı verilerini korumaktır. İkinci yol, özellikle sağlayıcı API'sini çağırmak ve daha fazla bilgi istemektir. FullName ve Link değerleri Facebook tarafından otomatik olarak geri geçirilir. Facebook'un hesabın Facebook API'sine yapılan bir çağrı aracılığıyla alındığını doğrulayıp doğrulamadığını gösteren değer. İlk olarak, FullName ve Link değerlerini dolduracak ve daha sonra doğrulanmış değeri alacaksınız.

Ek kullanıcı verilerini almak için, Denetleyiciler klasöründe AccountController.cs dosyasını açın.

Bu dosya hesapları günlüğe kaydetme, kaydetme ve yönetme mantığını içerir. Özellikle ExternalLoginCallback ve ExternalLoginConfirmation adlı yöntemlere dikkat edin. Bu yöntemler içinde, uygulamanız için dış oturum açma işlemlerini özelleştirmek için kod ekleyebilirsiniz. ExternalLoginCallback yönteminin ilk satırı aşağıdakileri içerir:

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(
    Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

VerifyAuthentication yönteminden döndürülen AuthenticationResult nesnesinin ExtraData özelliğinde ek kullanıcı verileri geri geçirilir. Facebook istemcisi ExtraData özelliğinde aşağıdaki değerleri içerir:

  • kimlik
  • name
  • bağlantı
  • cinsiyet
  • accesstoken

Diğer sağlayıcılar ExtraData özelliğinde benzer ancak biraz farklı verilere sahip olur.

Kullanıcı sitenizde yeniyse, bazı ek verileri alır ve bu verileri onay görünümüne geçirirsiniz. Yöntemindeki son kod bloğu yalnızca kullanıcı sitenizde yeniyse çalıştırılır. Aşağıdaki satırı değiştirin:

return View("ExternalLoginConfirmation", new RegisterExternalLoginModel 
{ 
    UserName = result.UserName, 
    ExternalLoginData = loginData 
});

Bu satırla:

return View("ExternalLoginConfirmation", new RegisterExternalLoginModel
{
    UserName = result.UserName,
    ExternalLoginData = loginData,
    FullName = result.ExtraData["name"],
    Link = result.ExtraData["link"]
});

Bu değişiklik yalnızca FullName ve Link özelliklerinin değerlerini içerir.

ExternalLoginConfirmation yönteminde, ek kullanıcı bilgilerini kaydetmek için kodu aşağıda vurgulandığı gibi değiştirin.

if (user == null)
{
    // Insert name into the profile table
    UserProfile newUser = db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
    db.SaveChanges();

    db.ExternalUsers.Add(new ExternalUserInformation 
    { 
        UserId = newUser.UserId, 
        FullName = model.FullName, 
        Link = model.Link 
    });
    db.SaveChanges();

    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

    return RedirectToLocal(returnUrl);
}
else
{
    ModelState.AddModelError("UserName", "User name already exists. Please enter a different user name.");
}

Görünümü ayarlama

Sağlayıcıdan aldığınız ek kullanıcı verileri kayıt sayfasında görüntülenir.

Görünümler/Hesabı klasöründe ExternalLoginConfirmation.cshtml dosyasını açın. Mevcut kullanıcı adı alanının altına FullName, Link ve PictureLink alanlarını ekleyin.

<li>
    @Html.LabelFor(m => m.FullName)
    @Html.TextBoxFor(m => m.FullName)
</li>
<li>
    @Html.LabelFor(m => m.Link)
    @Html.TextBoxFor(m => m.Link)
</li>

Artık uygulamayı çalıştırmaya ve kaydedilen ek bilgilerle yeni bir kullanıcı kaydetmeye neredeyse hazırsınız. Siteye kayıtlı olmayan bir hesabınız olmalıdır. Farklı bir test hesabı kullanabilir veya yeniden kullanmak istediğiniz hesabın UserProfile ve webpages_OAuthMembership tablolarındaki satırları silebilirsiniz. Bu satırları silerek hesabın yeniden kaydedildiğinden emin olursunuz.

Uygulamayı çalıştırın ve yeni kullanıcıyı kaydedin. Bu kez onay sayfasında daha fazla değer olduğuna dikkat edin.

Facebook hesabını uygulamayla ilişkilendirdikten sonra kullanıcı adını ve diğer bilgileri girebileceğiniz yeri gösteren ekran görüntüsü.

Kaydı tamamladıktan sonra tarayıcıyı kapatın. ExtraUserInformation tablosundaki yeni değerleri görmek için veritabanına bakın.

Facebook API için NuGet paketini yükleme

Facebook, işlemleri gerçekleştirmek için çağırabileceğiniz bir API sağlar. HTTP istekleri göndererek veya bu isteklerin gönderilmesini kolaylaştıran bir NuGet paketi yükleyerek Facebook API'sini çağırabilirsiniz. NuGet paketinin kullanılması bu öğreticide gösterilmiştir, ancak NuGet paketinin yüklenmesi gerekli değildir. Bu öğreticide Facebook C# SDK paketinin nasıl kullanılacağı gösterilmektedir. Facebook API'sini çağırmaya yardımcı olan başka NuGet paketleri de vardır.

NuGet Paketlerini Yönet pencerelerinden Facebook C# SDK paketini seçin.

paketi yükleme

Kullanıcı için erişim belirteci gerektiren bir işlemi çağırmak için Facebook C# SDK'sını kullanacaksınız. Sonraki bölümde erişim belirtecinin nasıl alınacakları gösterilmektedir.

Erişim belirtecini alma

Dış sağlayıcıların çoğu, kullanıcının kimlik bilgileri doğrulandıktan sonra bir erişim belirtecini geri geçirir. Bu erişim belirteci, yalnızca kimliği doğrulanmış kullanıcılar tarafından kullanılabilen işlemleri çağırmanıza olanak sağladığından çok önemlidir. Bu nedenle, daha fazla işlevsellik sağlamak istediğinizde erişim belirtecini almak ve depolamak önemlidir.

Dış sağlayıcıya bağlı olarak, erişim belirteci yalnızca sınırlı bir süre için geçerli olabilir. Geçerli bir erişim belirtecine sahip olduğunuzdan emin olmak için, kullanıcı her oturum açtığında bu belirteci alır ve bir veritabanına kaydetmek yerine bir oturum değeri olarak depolarsınız.

ExternalLoginCallback yönteminde, erişim belirteci AuthenticationResult nesnesinin ExtraData özelliğinde de geri geçirilir. Oturum nesnesine erişim belirtecini kaydetmek için vurgulanan kodu ExternalLoginCallback'e ekleyin. Bu kod, kullanıcı bir Facebook hesabıyla her oturum açtığında çalıştırılır.

[AllowAnonymous]
public ActionResult ExternalLoginCallback(string returnUrl)
{
    AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(
        Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));
    if (!result.IsSuccessful)
    {
        return RedirectToAction("ExternalLoginFailure");
    }

    if (result.ExtraData.Keys.Contains("accesstoken"))
    {
        Session["facebooktoken"] = result.ExtraData["accesstoken"];
    }

    if (OAuthWebSecurity.Login(
        result.Provider, 
        result.ProviderUserId, 
        createPersistentCookie: false))
    {
        return RedirectToLocal(returnUrl);
    }

    if (User.Identity.IsAuthenticated)
    {
        // If the current user is logged in add the new account
        OAuthWebSecurity.CreateOrUpdateAccount(
            result.Provider,
            result.ProviderUserId, 
            User.Identity.Name);
        return RedirectToLocal(returnUrl);
    }
    else
    {
        // User is new, ask for their desired membership name
        string loginData = OAuthWebSecurity.SerializeProviderUserId(
            result.Provider, 
            result.ProviderUserId);
        ViewBag.ProviderDisplayName =
            OAuthWebSecurity.GetOAuthClientData(result.Provider).DisplayName;
        ViewBag.ReturnUrl = returnUrl;
        return View("ExternalLoginConfirmation", new RegisterExternalLoginModel
        {
            UserName = result.UserName,
            ExternalLoginData = loginData,
            FullName = result.ExtraData["name"],
            Link = result.ExtraData["link"]
        });    
    }
}

Bu örnek Facebook'tan erişim belirteci alsa da, erişim belirtecini "accesstoken" adlı aynı anahtar aracılığıyla herhangi bir dış sağlayıcıdan alabilirsiniz.

Oturumu kapatma

Varsayılan LogOff yöntemi kullanıcıyı uygulamanızda günlüğe kaydeder, ancak dış sağlayıcının oturumunu kapatmaz. Kullanıcının Facebook oturumunu kapatmak ve kullanıcı oturumu kapattıktan sonra belirtecin kalıcı olmasını önlemek için AccountController'daki LogOff yöntemine aşağıdaki vurgulanmış kodu ekleyebilirsiniz.

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
    WebSecurity.Logout();
    if (Session["facebooktoken"] != null)
    {
        var fb = new Facebook.FacebookClient();
        string accessToken = Session["facebooktoken"] as string;
        var logoutUrl = fb.GetLogoutUrl(new { access_token = accessToken, next = "http://localhost:39852/" });

        Session.RemoveAll();
        return Redirect(logoutUrl.AbsoluteUri);
    }

    return RedirectToAction("Index", "Home");
}

parametresinde next sağladığınız değer, kullanıcı Facebook oturumu kapatıldıktan sonra kullanılacak URL'dir. Yerel bilgisayarınızda test ederken, yerel siteniz için doğru bağlantı noktası numarasını sağlamanız gerekir. Üretimde, contoso.com gibi bir varsayılan sayfa sağlarsınız.

Erişim belirteci gerektiren kullanıcı bilgilerini alma

Erişim belirtecini depoladığınıza ve Facebook C# SDK paketini yüklediğinize göre, bunları birlikte kullanarak Facebook'tan ek kullanıcı bilgileri isteyebilirsiniz. ExternalLoginConfirmation yönteminde, erişim belirtecinin değerini geçirerek FacebookClient sınıfının bir örneğini oluşturun. Geçerli, kimliği doğrulanmış kullanıcı için doğrulanmış özelliğin değerini isteyin. Doğrulanmış özellik, Facebook'un hesabı cep telefonuna ileti gönderme gibi başka bir yolla doğrulayıp doğrulamadığını gösterir. Bu değeri veritabanına kaydedin.

if (user == null)
{
    // Insert name into the profile table
    UserProfile newUser = db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
    db.SaveChanges();

    bool facebookVerified;

    var client = new Facebook.FacebookClient(Session["facebooktoken"].ToString());
    dynamic response = client.Get("me", new { fields = "verified" });
    if (response.ContainsKey("verified"))
    {
        facebookVerified = response["verified"];
    }
    else
    {
        facebookVerified = false;
    }

    db.ExternalUsers.Add(new ExternalUserInformation 
    { 
        UserId = newUser.UserId, 
        FullName = model.FullName, 
        Link = model.Link, 
        Verified = facebookVerified 
    });
    db.SaveChanges();

    OAuthWebSecurity.CreateOrUpdateAccount(provider, providerUserId, model.UserName);
    OAuthWebSecurity.Login(provider, providerUserId, createPersistentCookie: false);

    return RedirectToLocal(returnUrl);
}

Kullanıcı için veritabanındaki kayıtları yeniden silmeniz veya farklı bir Facebook hesabı kullanmanız gerekir.

Uygulamayı çalıştırın ve yeni kullanıcıyı kaydedin. Doğrulanmış özelliğinin değerini görmek için ExtraUserInformation tablosuna bakın.

Sonuç

Bu öğreticide, kullanıcı kimlik doğrulaması ve kayıt verileri için Facebook ile tümleştirilmiş bir site oluşturdunuz. MVC 4 web uygulaması için ayarlanan varsayılan davranışı ve bu varsayılan davranışı özelleştirmeyi öğrendin.