gpt4 book ai didi

asp.net-mvc - 简单的成员身份 WebSecurity.CreateUserAndAccount 给出重复的 UserId 错误

转载 作者:行者123 更新时间:2023-12-04 05:19:13 26 4
gpt4 key购买 nike

使用 MVC 4,Simplemembership

我正在构建一个供企业使用的 Web 应用程序,因此不希望开箱即用的 MVC 4 模板功能允许用户注册。相反,我想要一个仅允许管理员访问然后创建用户的创建用户 View 。我希望我可以更改注册 Controller 上的安全性,然后让当前登录的用户使用现有的注册 View 创建用户......没有骰子。

这是 Controller 中的代码。我没有从模板中改变它:

// POST: /Account/Register

[HttpPost]
//[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(
model.UserName,
model.Password,
new { FirstName = model.FirstName, LastName = model.LastName, Email = model.Email },
false
);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}

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

当当前登录的用户尝试通过此创建新用户时,您会收到错误消息(@ 第 86 行):
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_UserProfile_webpages_Membership". The conflict occurred in database "OTIS", table "dbo.webpages_Membership", column 'UserId'.
The statement has been terminated.

Line 84: try
Line 85: {
Line 86: WebSecurity.CreateUserAndAccount(
Line 87: model.UserName,
Line 88: model.Password,

Hwre 是 UserProfile 类
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }

[Required]
[Display(Name = "User name")]
public string UserName { get; set; }

[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }

[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }

[Display(Name = "Email")]
public string Email { get; set; }
}

WebSecurity.CurrentUserID 填充了当前登录的用户,我认为这是导致问题的原因。使用 simplemembership 提供程序实现此目的的正确方法是什么?

编辑:我尝试将其移回允许匿名用户注册,因此在调试时 WebSecurity.CurrentUserID 为 -1,但仍然出现相同的错误。如果类中的 UserId 字段使用属性 [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 进行修饰,那么如何生成重复键?

最佳答案

我遇到了同样的问题,但我使用提供程序中的 CreateUserAndAccount 方法而不是 WebSecurity 解决了它。

var membership = (SimpleMembershipProvider)Membership.Provider;
membership.CreateUserAndAccount(
model.UserName,
model.Password,
new Dictionary<string, object>{
{ "FirstName", model.FirstName},
{ "LastName", model.LastName},
{ "Email", model.Email }
}
);

关于asp.net-mvc - 简单的成员身份 WebSecurity.CreateUserAndAccount 给出重复的 UserId 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com