.net - Implementing UserManager to use a custom class and Stored Procedures -


all of authentication , authorization process of app done using stored procedures. i've written class of functionalities need, e.g. getusers, login, addrole, addmember, etc. admin page managing users , roles , permissions done using class.

i need add authentication (i mean authorize attribute), cookies login , logout , storing server-side data each login. think need implement identity that?

in case, can please guide me implementation? seems basic thing need implement create method passes instance of iuserstore constructor. don't need have tables users or roles, how can implement method?

this current class, , please let me know if need see custom authentication class uses stored procedures.

public class appusermanager : usermanager<appuser> {     public appusermanager(iuserstore<appuser> store) : base(store) { }     public static appusermanager create(identityfactoryoptions<appusermanager> options, iowincontext context)     {         //appusermanager manager = new appusermanager();         //return manager;         return null;     } } 

as alisabzevari suggested have implement iuserstore.
not depend on storage , table structure defined. can customize every single bit of storage layer.

i did experiments , tried implement own usermanager , rolemanager using different storage, such biggy:

a file-based document store .net.

you can find code here on github.

first thing implement usermanager can configure requirements password validation:

public class appusermanager : usermanager<appuser, int> {     public appusermanager (iuserstore<appuser, int> store): base(store)     {         this.userlockoutenabledbydefault = false;         // this.defaultaccountlockouttimespan = timespan.fromminutes(10);         // this.maxfailedaccessattemptsbeforelockout = 10;         this.uservalidator = new uservalidator<user, int>(this)         {         allowonlyalphanumericusernames = false,         requireuniqueemail = false         };          // configure validation logic passwords         this.passwordvalidator = new passwordvalidator         {         requiredlength = 4,         requirenonletterordigit = false,         requiredigit = false,         requirelowercase = false,         requireuppercase = false,         };     } } 

and define iuserstore implementation. main method must implement createasync:

public system.threading.tasks.task createasync(user user) {     // saves user in storage.     return task.fromresult(user); } 

it receive iuser have persist in custom storage , return it.

if have @ code i've implemented can see i've used few interfaces iuserrolestore, iuserpasswordstore, iuserclaimstore etc etc needed use roles , claims.

i've implemented own signinmanager.

once you've defined implementation can bootstrap @ startup:

app.createperowincontext<custom.identity.usermanager>(() => new custom.identity.usermanager(new custom.identity.userstore(folderstorage))); app.createperowincontext<custom.identity.rolemanager>(() => new custom.identity.rolemanager(new custom.identity.rolestore(folderstorage))); app.createperowincontext<custom.identity.signinservice>((options, context) => new custom.identity.signinservice(context.getusermanager<custom.identity.usermanager>(), context.authentication)); 

you can check accountcontroller try validate user:

var result = await signinmanager.passwordsigninasync(model.email, model.password, model.rememberme, shouldlockout: false); switch (result) { case signinstatus.success:     return redirecttolocal(returnurl); case signinstatus.lockedout:     return view("lockout"); case signinstatus.requiresverification:     return redirecttoaction("sendcode", new { returnurl = returnurl, rememberme = model.rememberme }); case signinstatus.failure: default:     modelstate.addmodelerror("", "invalid login attempt.");     return view(model); } 

once passwordsigninasync called notice few of methods of usermanager called. first 1 findbynameasync:

public system.threading.tasks.task<user> findbynameasync(string username) {     //fetch user using username.     return task.fromresult(user); } 

you have implement stored procedure, guess, you'll fetch user db.

then method findbyidasync called:

public system.threading.tasks.task<user> findbyidasync(int userid) {     // fetch - again - user db id.     return task.fromresult(user); } 

again you'll have use stored procedure find user his/her id.

if download project github , play around you'll notice of methods called multiple times. don't scared. that's way is.

i suggest insert breakpoints in every single method of userstore , see how fits together.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -