asp.net core 的用户注册功能——Identity上手
首先请using这个类库。
using microsoft.aspnetcore.identity;
这个类库老牛逼了,首先是包含了一个identityuser类。我们可以自己写一个user类继承identityuser,这样一来,很多属性我就不用手动建了。如你所见,我的user没有emai这个字段,但是identityuser有这个字段。
public class user:identityuser { public string pass { get; set; } public string displayname { get; set; } public datetime registeredtime { get; set; } }
如何把用户发来的数据变成一个user并且存入数据库?
显然,我他妈得先创建并且连接一个数据库。
创建数据库如果使用vsstudio是贼容易的一件事,只需要打开'视图菜单',然后点开'sql server对象资源管理器'。然后你就看到下面这个图。在上面点右键然后添加一个sql服务器,然后在服务器上点右键查看属性,可以得到链接字符串。
这种简单的操作显然难不住你。下一步把连接字符串放到appsetting.json里面,下面这是一种推荐做法。你当然可以直接粘贴到你的startup.cs文件中。不过谁会这么做呢?
"connectionstrings": { "defaultconnection": "这里就是你的连接字符串" }
下一步要用这个连接字符串连上你的数据库。注意带颜色的字。很jb重要。
// this method gets called by the runtime. use this method to add services to the container. public void configureservices(iservicecollection services) { services.configure<cookiepolicyoptions>(options => { // this lambda determines whether user consent for non-essential cookies is needed for a given request. options.checkconsentneeded = context => true; options.minimumsamesitepolicy = samesitemode.none; }); // 看到了么,下面这行代码用来连接数据库。这是ef提供的方法。 services.adddbcontext<appcontext>(options => options.usesqlserver(configuration.getconnectionstring("defaultconnection"))); // 在这里指定你的user类,然后再指定你的数据库。这是identity类库提供的方法。 services.adddefaultidentity<user>().addentityframeworkstores<appcontext>(); services.addmvc().setcompatibilityversion(compatibilityversion.version_2_1); }
public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } else { app.useexceptionhandler("/error"); app.usehsts(); } app.usehttpsredirection(); app.usestaticfiles(); app.usecookiepolicy(); // 这里必须用上。 app.useauthentication(); app.usemvc(); }
经过上面的配置,controller里面就可以注入很多方法。这下你看起来牛逼多了。
数据库连上了,接下来是真枪实弹的创建一个用户,是时候写controller了。
建一个随便什么controller吧。我建的是usercontroller,你可以随你的便。关我屌事呢?
在controller的构造函数里面注入一个usermanager的类,这个类也是identity提供的。
public class usercontroller : controllerbase { private readonly usermanager<user> _usermanager; public usercontroller(usermanager<user> usermanager) { _usermanager = usermanager; } ......
这个usermanager有贼多的方法,这里我只用一个,createasync方法。
// post: api/user [httppost] public async task postasync([frombody]user _user) { //先创建一个user,不包括密码
var user = new user { email = _user.email , username = _user.username};
//将user和密码绑定入库 var result = await _usermanager.createasync(user, _user.pass); if (result.succeeded) { console.write("注册成功!"); } }
用postman模拟一个请求。你注意到那个frombody了吗?这个标记可以把发过来的json请求解析成user格式。
这里有一个新手大坑。如果你的 [frombody] user _user这里写的是[frombody] string _user, 你就不能用json格式发。会报什么json解析错误。
发送请求以后去看看你的数据库吧。已经创建好了一个user对象并且存到了你的数据库里。
这么多字段都是来自identityuser类,其中只有那个pass字段是我自己userclass里面的。
上一篇: Python爬虫,你是否真的了解它?