当前位置: 移动技术网 > IT编程>开发语言>.net > asp.net core 的用户注册功能——Identity上手

asp.net core 的用户注册功能——Identity上手

2018年11月14日  | 移动技术网IT编程  | 我要评论

总裁的预定新娘,丛林佳酿,工笔荷花图片

首先请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里面的。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网