Mengkonfigurasi Identitas ke proyek Anda saat ini bukanlah hal yang sulit. Anda harus menginstal beberapa paket NuGet dan melakukan beberapa konfigurasi kecil.
Pertama instal paket-paket NuGet ini dengan Package Manager Console:
PM> Install-Package Microsoft.AspNet.Identity.Owin
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
PM> Install-Package Microsoft.Owin.Host.SystemWeb
Tambahkan kelas pengguna dan dengan IdentityUser
warisan:
public class AppUser : IdentityUser
{
//add your custom properties which have not included in IdentityUser before
public string MyExtraProperty { get; set; }
}
Lakukan hal yang sama untuk peran:
public class AppRole : IdentityRole
{
public AppRole() : base() { }
public AppRole(string name) : base(name) { }
// extra properties here
}
Ubah DbContext
orang tua Anda DbContext
menjadi IdentityDbContext<AppUser>
seperti ini:
public class MyDbContext : IdentityDbContext<AppUser>
{
// Other part of codes still same
// You don't need to add AppUser and AppRole
// since automatically added by inheriting form IdentityDbContext<AppUser>
}
Jika Anda menggunakan string koneksi yang sama dan migrasi yang diaktifkan, EF akan membuat tabel yang diperlukan untuk Anda.
Secara opsional, Anda dapat memperluas UserManager
untuk menambahkan konfigurasi dan kustomisasi yang Anda inginkan:
public class AppUserManager : UserManager<AppUser>
{
public AppUserManager(IUserStore<AppUser> store)
: base(store)
{
}
// this method is called by Owin therefore this is the best place to configure your User Manager
public static AppUserManager Create(
IdentityFactoryOptions<AppUserManager> options, IOwinContext context)
{
var manager = new AppUserManager(
new UserStore<AppUser>(context.Get<MyDbContext>()));
// optionally configure your manager
// ...
return manager;
}
}
Karena Identity didasarkan pada OWIN, Anda perlu mengonfigurasi OWIN juga:
Tambahkan kelas ke App_Start
folder (atau tempat lain jika Anda mau). Kelas ini digunakan oleh OWIN. Ini akan menjadi kelas startup Anda.
namespace MyAppNamespace
{
public class IdentityConfig
{
public void Configuration(IAppBuilder app)
{
app.CreatePerOwinContext(() => new MyDbContext());
app.CreatePerOwinContext<AppUserManager>(AppUserManager.Create);
app.CreatePerOwinContext<RoleManager<AppRole>>((options, context) =>
new RoleManager<AppRole>(
new RoleStore<AppRole>(context.Get<MyDbContext>())));
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Home/Login"),
});
}
}
}
Hampir selesai, tambahkan saja baris kode ini ke web.config
file Anda sehingga OWIN dapat menemukan kelas startup Anda.
<appSettings>
<!-- other setting here -->
<add key="owin:AppStartup" value="MyAppNamespace.IdentityConfig" />
</appSettings>
Sekarang di seluruh proyek Anda bisa menggunakan Identity sama seperti proyek baru yang sudah diinstal oleh VS. Pertimbangkan tindakan masuk sebagai contoh
[HttpPost]
public ActionResult Login(LoginViewModel login)
{
if (ModelState.IsValid)
{
var userManager = HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
var authManager = HttpContext.GetOwinContext().Authentication;
AppUser user = userManager.Find(login.UserName, login.Password);
if (user != null)
{
var ident = userManager.CreateIdentity(user,
DefaultAuthenticationTypes.ApplicationCookie);
//use the instance that has been created.
authManager.SignIn(
new AuthenticationProperties { IsPersistent = false }, ident);
return Redirect(login.ReturnUrl ?? Url.Action("Index", "Home"));
}
}
ModelState.AddModelError("", "Invalid username or password");
return View(login);
}
Anda bisa membuat peran dan menambahkan ke pengguna Anda:
public ActionResult CreateRole(string roleName)
{
var roleManager=HttpContext.GetOwinContext().GetUserManager<RoleManager<AppRole>>();
if (!roleManager.RoleExists(roleName))
roleManager.Create(new AppRole(roleName));
// rest of code
}
Anda juga bisa menambahkan peran ke pengguna, seperti ini:
UserManager.AddToRole(UserManager.FindByName("username").Id, "roleName");
Dengan menggunakan Authorize
Anda dapat menjaga tindakan atau pengendali Anda:
[Authorize]
public ActionResult MySecretAction() {}
atau
[Authorize(Roles = "Admin")]]
public ActionResult MySecretAction() {}
Anda juga dapat menginstal paket tambahan dan mengkonfigurasinya untuk memenuhi kebutuhan Anda seperti Microsoft.Owin.Security.Facebook
atau yang Anda inginkan.
Catatan: Jangan lupa untuk menambahkan spasi nama yang relevan ke file Anda:
using Microsoft.AspNet.Identity;
using Microsoft.Owin.Security;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
Anda juga dapat melihat jawaban saya yang lain seperti ini dan ini untuk penggunaan Identitas tingkat lanjut.