こんにちは私の会社のウェブサイトを作ろうとしていますが、私は登録ページに新しいユーザーを登録しようとするたびにユーザーアカウントを取得しようとしていますデータベースにユーザーを作成しないでください。 SSOXのlocalDBを見て、これを複数回確認しました。このウェブサイトはasp dotnet coreで書かれています。認証テンプレートの後にこれまで行った唯一の変更は、まずEntity Frameworkコードを使用してユーザー列を追加し、それに応じてフォームとコントローラにユーザー入力を追加しました。また、私はhttps://docs.asp.net/en/latest/security/authentication/accconfirm.html のチュートリアルに従ってアカウント確認を追加しました。アカウントASPネットコアの登録ユーザーが登録されていない
dotnetcore aspはかなり新しいですが、多くの質問はありません、私はGoogleと私の問題を検索してスタックにも私の問題の答えを見つけることに失敗しました。アカウントコントローラ、レジスタビューモデル、およびレジスタビューに私のコードを含めました。
誰かが解決策を知っていれば、私は非常に素晴らしいだろう。
アカウントコントローラの登録コード:ここで
// GET: /Account/Register
[HttpGet]
[AllowAnonymous]
public IActionResult Register(string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
return View();
}
//
// POST: /Account/Register
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713
// Send an email with this link
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);
await _emailSender.SendEmailAsync(model.UserName, model.Email, "Confirm your account", $"Please confirm your account by clicking this link: <a href='{callbackUrl}'>link</a>");
//Line commented to prevent user logging in without confirming account. //await _signInManager.SignInAsync(user, isPersistent: false);
_logger.LogInformation(3, $"User {user.Id} created a new account");
return RedirectToLocal(returnUrl);
}
AddErrors(result);
}
// If we got this far, something failed, redisplay form
return View(model);
}
は私RegisterViewModelコード:
using System.ComponentModel.DataAnnotations;
namespace MainSite.Models.AccountViewModels
{
public class RegisterViewModel
{
[Required]
[Display(Name = "Username")]
public string UserName { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
}
そして、私の登録ビューコード:
@model RegisterViewModel
@{
ViewData["Title"] = "Register";
}
<h2>@ViewData["Title"].</h2>
<form asp-controller="Account" asp-action="Register" asp-route-returnurl="@ViewData["ReturnUrl"]" method="post" class="form-horizontal">
<h4>Create a new account.</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="UserName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="UserName" class="form-control" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Password" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">Register</button>
</div>
</div>
</form>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
エラーが生じましたか?無効になったですか? –
'[Authorize]'属性は存在してはいけません。それの代わりに '[AllowAnonymous]'を入れてください。 –
@CristianSzpisjakこれはあなたに感謝してくれました。ユーザーのみがサイトにアクセスできるようにする私のプロセスでは、あまりにも余分な[Authorize]タグを入れてしまったようです。そして、一度私は電子メール認証コードのコメントをはずした。 – Curtis