अपने मौजूदा प्रोजेक्ट के लिए पहचान को कॉन्फ़िगर करना मुश्किल काम नहीं है। आपको कुछ NuGet पैकेज स्थापित करने और कुछ छोटे कॉन्फ़िगरेशन करने होंगे।
पहले पैकेज प्रबंधक कंसोल के साथ इन NuGet संकुल को स्थापित करें:
PM> Install-Package Microsoft.AspNet.Identity.Owin
PM> Install-Package Microsoft.AspNet.Identity.EntityFramework
PM> Install-Package Microsoft.Owin.Host.SystemWeb
एक उपयोगकर्ता वर्ग और IdentityUser
विरासत के साथ जोड़ें :
public class AppUser : IdentityUser
{
//add your custom properties which have not included in IdentityUser before
public string MyExtraProperty { get; set; }
}
भूमिका के लिए एक ही काम करें:
public class AppRole : IdentityRole
{
public AppRole() : base() { }
public AppRole(string name) : base(name) { }
// extra properties here
}
अपने DbContext
माता-पिता DbContext
को IdentityDbContext<AppUser>
इस तरह से बदलें :
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>
}
यदि आप एक ही कनेक्शन स्ट्रिंग और सक्षम माइग्रेशन का उपयोग करते हैं, तो ईएफ आपके लिए आवश्यक तालिकाओं का निर्माण करेगा।
वैकल्पिक रूप से, आप UserManager
अपने वांछित विन्यास और अनुकूलन को जोड़ने के लिए विस्तार कर सकते हैं :
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;
}
}
चूंकि पहचान OWIN पर आधारित है, इसलिए आपको OWIN को भी कॉन्फ़िगर करने की आवश्यकता है:
App_Start
फ़ोल्डर में एक वर्ग जोड़ें (या यदि आप चाहें तो कहीं भी)। इस वर्ग का उपयोग OWIN द्वारा किया जाता है। यह आपका स्टार्टअप क्लास होगा।
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"),
});
}
}
}
लगभग किया बस अपनी web.config
फ़ाइल के लिए कोड की इस लाइन को जोड़ने ताकि OWIN अपने स्टार्टअप वर्ग पा सकते हैं।
<appSettings>
<!-- other setting here -->
<add key="owin:AppStartup" value="MyAppNamespace.IdentityConfig" />
</appSettings>
अब पूरे प्रोजेक्ट में आप आइडेंटिटी का उपयोग कर सकते हैं, जैसे कोई नया प्रोजेक्ट पहले ही VS द्वारा स्थापित किया गया था। उदाहरण के लिए लॉगिन क्रिया पर विचार करें
[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);
}
आप भूमिकाएँ बना सकते हैं और अपने उपयोगकर्ताओं को जोड़ सकते हैं:
public ActionResult CreateRole(string roleName)
{
var roleManager=HttpContext.GetOwinContext().GetUserManager<RoleManager<AppRole>>();
if (!roleManager.RoleExists(roleName))
roleManager.Create(new AppRole(roleName));
// rest of code
}
आप इस तरह एक उपयोगकर्ता के लिए एक भूमिका जोड़ सकते हैं:
UserManager.AddToRole(UserManager.FindByName("username").Id, "roleName");
उपयोग करके Authorize
आप अपने कार्यों या नियंत्रकों की रक्षा कर सकते हैं:
[Authorize]
public ActionResult MySecretAction() {}
या
[Authorize(Roles = "Admin")]]
public ActionResult MySecretAction() {}
आप अतिरिक्त पैकेज भी स्थापित कर सकते हैं और उन्हें अपनी आवश्यकता को पूरा करने के लिए कॉन्फ़िगर कर सकते हैं जैसे Microsoft.Owin.Security.Facebook
आप जो भी चाहते हैं।
नोट: अपनी फ़ाइलों में प्रासंगिक नामस्थान जोड़ना न भूलें:
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;
तुम भी तरह मेरे अन्य उत्तर देख सकते हैं इस और इस पहचान के उन्नत उपयोग के लिए।