Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Identity 2.1 -使用临时密码创建用户会导致ModelState无效

Identity 2.1 -使用临时密码创建用户会导致ModelState无效
EN

Stack Overflow用户
提问于 2015-05-27 15:25:35
回答 1查看 530关注 0票数 0

我正在尝试使用临时密码来注册用户,它会在注册过程中立即通过电子邮件调用密码重置。在测试代码时,我在!ModelState.Valid检查下面得到一个错误,说“密码字段是必需的”。我在model.Password下定义了一个临时使用的密码,那么这里遗漏了什么?

代码语言:javascript
运行
AI代码解释
复制
// POST: /Account/Register
    [HttpPost]
    [Authorize(Roles = "SuperAdmin, LEAAdmin, SchoolAdmin")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        model.BackgroundOnFile = false;

            var userDetails = new ApplicationUser { 
                Id = model.Id, 
                UserName = model.Email, 
                Title = model.Title, 
                Email = model.Email, 
                FirstName = model.FirstName, 
                LastName = model.LastName, 
                LEAID = model.LEAID, 
                SchoolID = model.SchoolID, 
                BackgroundOnFile = model.BackgroundOnFile, 
                BoardStart = model.BoardStart, 
                BoardEnd = model.BoardEnd, 
                PhoneNumber = model.PhoneNumber, 
                IsBoardChair = model.IsBoardChair, 
                IsBoardMember = model.IsBoardMember, 
                IsAccountActive = model.IsAccountActive,
            };

//Declaring in Scope
                var result = new IdentityResult();
            //Process if new
            if(model.Id == "" || model.Id == "undefined" || model.Id == "null" || model.Id == "-9999")
            {
                model.Password = "D0neW!thTh15";
                if (ModelState.IsValid)
                {
                result = await UserManager.CreateAsync(userDetails, model.Password);

                var getPassword = new ForgotPasswordViewModel
                {
                    Email = model.Email
                };

                //Email PW
                await ForgotPassword(getPassword);
                }

                if(!ModelState.IsValid)
                {
                    string validationErrors = string.Join(",",ModelState.Values.Where(E => E.Errors.Count > 0).SelectMany(E => E.Errors).Select(E => E.ErrorMessage).ToArray());
                }

            }

            //Process if update
            if (model.Id != "" || model.Id != "undefined" || model.Id != "null" || model.Id != "-9999")
            {
                if (ModelState.IsValid)
                {
                result = await UserManager.UpdateAsync(userDetails);
                }
            }


            //Process Roles
            //Remove access if deactivated
            if (model.IsAccountActive == false)
            {
                var user = await UserManager.FindByIdAsync(userDetails.Id);
                await UserManager.RemoveFromRolesAsync(userDetails.Id, UserManager.GetRoles(userDetails.Id).ToArray());
                await UserManager.AddToRoleAsync(userDetails.Id, "Deactivated");
                userDetails.LockoutEnabled = true;
                await UserManager.UpdateAsync(userDetails);
            }

            else
            {

                //Moved to separate controller, for safety Admin rights can only be done for existing users

                if(model.LEAAdmin == true)
                {
                    await UserManager.AddToRoleAsync(userDetails.Id, "LEAAdmin");
                }

                //LEAAdmin is higher level, so don't allow override to a lower level
                if(model.IsBoardChair == true && model.LEAAdmin == false)
                {
                    await UserManager.AddToRoleAsync(userDetails.Id, "SchoolAdmin");
                }

                else
                {
                    await UserManager.AddToRoleAsync(userDetails.Id, "User");
                }

            }




            if (result.Succeeded)
            {
                //await SignInManager.SignInAsync(userDetails, isPersistent:false, rememberBrowser:false);

                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                // Send an email with this link
                // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                //return RedirectToAction("Index", "Home");
                return Json("Password sent!");
            }
            AddErrors(result);


        // If we got this far, something failed, redisplay form
        //return View(model);
        return View();
    }

下面是ApplicationUser的代码,如果你需要它的话:

代码语言:javascript
运行
AI代码解释
复制
 public class ApplicationUser : IdentityUser
{

    //Extra items required to register
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int LEAID { get; set; }
    public int SchoolID { get; set; }
    //public string Address1 { get; set; }
    //public string Address2 { get; set; }
    //public string City { get; set; }
    //public string State { get; set; }
    //Post Code is a string to accomodate future possible Canadian style post codes
    //public string PostCode { get; set; }
    public bool BackgroundOnFile { get; set; }
    public bool IsBoardMember { get; set; }
    public bool IsBoardChair { get; set; }
    public System.DateTime? BoardStart { get; set; }
    public System.DateTime? BoardEnd { get; set; }
    public string NominatedBy { get; set; }
    public bool IsAccountActive { get; set; }


    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}

更新:已请求注册的ViewModel

代码语言:javascript
运行
AI代码解释
复制
 [Required]
 [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [System.Web.Mvc.CompareAttribute("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
EN

回答 1

Stack Overflow用户

发布于 2015-05-27 15:42:34

在将值传递给服务器并创建ModelState时,将在默认ModelBinder中进行RegisterViewModel验证。这意味着当您更新模型时,ModelState.IsValid不会自动更改。要重新验证模型,可以执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
//Set password here
ModelState.Clear(); // Clear the current ModelState
TryValidateModel(model); // Try to re-validate.
if (ModelState.IsValid) // Now check!
{
    ...
}

这样做可以清除当前的ModelState,然后强制重新验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30486763

复制
相关文章
【Hive】从长格式表到宽格式表的转换
使用sql代码作分析的时候,几次遇到需要将长格式数据转换成宽格式数据,一般使用left join或者case when实现,代码看起来冗长,探索一下,可以使用更简单的方式实现长格式数据转换成宽格式数据。
1480
2019/05/22
2.4K0
【python】使用csv库以字典格式读写csv文件
1、使用csv.DictWriter()写入字典格式的数据 import csv with open('test.csv', 'w', newline='') as csvfile: fieldnames = ['first_name', 'last_name'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'first
西西嘛呦
2020/08/26
1.8K0
【python】使用csv库以字典格式读写csv文件
使用 Python 从字典键中删除空格
Python是广泛用于数据分析,Web开发,AI的平台,并在自动化的帮助下执行许多不同类型的任务。对我们来说,了解 python 的不同功能很重要。在本文中,我们将了解字典功能以及如何使用 python 删除键之间的空格。此功能主要用于根据需要存储和检索数据,但有时字典的键值之间可能存在空格。当用户希望访问数据时,甚至在要编辑数据的情况下,这会导致错误。
很酷的站长
2023/08/11
4960
使用 Python 从字典键中删除空格
深入Python数据分析:数据由长格式变为宽格式
melt()的逆操作在Pandas中对应为 pivot(),它也是一个设计上的顶层函数,工程位置如下:
double
2019/05/27
1.4K0
计算所汉语词法分析系统ICTCLAS 字典格式解析(字典格式说明)
     在 计算所汉语词法分析系统ICTCLAS 字典格式解析  一文中简单介绍了一下 ICTCLAS 。本来是要把字典格式一并写上去,无奈不知道怎么描述这个格式,现在终于写出了第一个Java版本的代码,也理清了思路。这个文件格式可以这样来描述:
田春峰-JCJC错别字检测
2019/02/14
5720
Python - 从字典列表中删除字典
字典是python的一个非常常用的功能,用于根据用户需要在其中存储数据。另一个典型的过程涉及编辑或操作此数据。要成为一名高效且快速的程序员,您必须弄清楚如何从字典列表中删除字典。有许多技术可以从词典列表中删除字典,本文将介绍这些技术。
很酷的站长
2023/08/11
4620
Python - 从字典列表中删除字典
【Python】json 格式转换 ① ( json 模块使用 | 列表转 json | json 转列表 | 字典转 json | json 转字典 )
然后 , 准备 python 数据 , 将数据放到 list 列表中 , 列表中的元素是 dict 字典 ;
韩曙亮
2023/10/11
7320
【Python】json 格式转换 ① ( json 模块使用 | 列表转 json | json 转列表 | 字典转 json | json 转字典 )
使用字典
字典是另一种可变容器模型,类似于我们生活中使用的字典,它可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。下面的代码演示了如何定义和使用字典。
用户8442333
2021/05/18
4480
CTF从入门到提升之宽字节注入
为什么说是从入门到放弃呢?(开个玩笑)如果说大家对CTF有了解的话,其实应该知道CTF是一个什么类型的比赛,这个比赛涉及的范围和影响有多大。如果说你真的想打好比赛,那也是真的非常不容易的,所以说这是非常困难的一件事情,初期可能学着学着就想放弃了,所以我就以这个来作为一个标题,当然本意不是让大家去放弃,就是为了让大家入个门然后再提升! 我会和我朋友一起来完成这门课程的讲解。
牛油果
2019/08/15
1.1K0
python 从字典中提取子集
prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } Make a dictionary of all prices over 200 p1 = {key: value for key, value in prices.items() if value > 200} Make a dictionary of tech stocks tech_names = {'AAPL', 'IB
用户5760343
2019/09/25
1.3K0
Python 字典 使用技巧
可以看出,键十从1到676,值是26个英文大写字母的组合。 我们首先要做的是找到字母组合的方法,首先想到的应该是利用chr()函数得到整型对应的字符,范围是65-90,进而可以用得到两个字符的组合,如下:
cutercorley
2020/07/23
6290
Python 字典 使用技巧
Python 之 字典使用
字典的增删改查使用 1、增加 info = { "person1":"大s", "person2":"小s", "person3":"小3", "person4":"小4" } info["person5"]="小5" info = { "广东" : { "深圳":["罗湖", "福田", "南山"], "广州":["天河", "番禺", "白云"], }, "浙江" : { "杭州":["西湖","
py3study
2020/01/14
5440
如何使用UnBlob从任意格式容器中提取文件
 关于UnBlob  UnBlob是一款针对容器安全的强大工具,该工具可以从任意格式的容器中提取文件。该工具运行速度非常快,准确率高,并且易于使用。UnBlob能够解析已知的超过30种不同格式的文档、压缩文件和文件系统,并能够从中递归提取文件内容。 UnBlob是完全开源免费的,并提供了一个命令行接口。除此之外,该工具还能够以Python库的形式来使用。这些特性使得UnBlob成为文件/数据提取、分析和逆向固件镜像的完美工具。 工具特性  1、准确率高:支持使用自定义规则识别数据区块的起始偏移量,并根
FB客服
2023/03/29
1.6K0
如何使用UnBlob从任意格式容器中提取文件
python yaml格式文件转json或字典
python代码: import yaml f = open('data.yaml', 'r') ystr = f.read() aa = yaml.load(ystr, Loader=yaml.FullLoader) print(aa) aa就是json字典对象
小贝壳
2020/03/05
4.7K0
Python读取Excel数据并以字典dict格式存储
  本文介绍基于Python语言,将一个Excel表格文件中的数据导入到Python中,并将其通过字典格式来存储的方法。
疯狂学习GIS
2023/06/26
5540
Python读取Excel数据并以字典dict格式存储
使用fold命令限制文件列宽
fold命令会从指定的文件里读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。若不指定任何文件名称,或是所给予的文件名为”-“,则fold指令会从标准输入设备读取数据。
用户1685462
2021/09/08
6370
Python字典使用(八)
字典的每个键值(key=>value)对用冒号分隔,每对之间用逗号分割,整个字典包括花括号在内,如下所示:
py3study
2020/01/10
7830
qtreewidget基本使用_qtreewidget列宽自适应
1、void QTreeWidget::setHeaderLabels(const QStringList & labels)
全栈程序员站长
2022/11/10
1.9K0
qtreewidget基本使用_qtreewidget列宽自适应
php宽字节注入,[投稿]宽字节注入详解
在mysql中,用于转义的函数有addslashes,mysql_real_escape_string,mysql_escape_string等,还有一种情况是magic_quote_gpc,不过高版本的PHP将去除这个特性。
全栈程序员站长
2022/11/04
3.5K0
php宽字节注入,[投稿]宽字节注入详解
MySQL数据表生成Wiki格式数据字典
<?php $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $dbName='joyous'; //使用的数据库 $user='te
苦咖啡
2018/10/22
1.6K0

相似问题

Pebble - Detect Shake手势

15

Swift - Shake手势关闭子视图控制器

07

滑动手势取消IBAction的触发分段

11

将变量从手势识别器函数传递给IBAction

22

配置抽头手势识别器,以响应在点击位置的ibaction

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文