2016-10-21 43 views
0

こんにちは私の会社のウェブサイトを作ろうとしていますが、私は登録ページに新しいユーザーを登録しようとするたびにユーザーアカウントを取得しようとしていますデータベースにユーザーを作成しないでください。 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"); } 
} 
+0

エラーが生じましたか?無効になったですか? –

+0

'[Authorize]'属性は存在してはいけません。それの代わりに '[AllowAnonymous]'を入れてください。 –

+0

@CristianSzpisjakこれはあなたに感謝してくれました。ユーザーのみがサイトにアクセスできるようにする私のプロセスでは、あまりにも余分な[Authorize]タグを入れてしまったようです。そして、一度私は電子メール認証コードのコメントをはずした。 – Curtis

答えて

0

[Authorize]属性を[AllowAnonymous]に置き換えてください。

0

あなたがしようとすると、電子メールを取り出すことができますあなたのPOSTリクエストでの確認と登録を残して、違いがあれば参照してくださいあなたのプロセスで。

また、上記のものと同様のASP.NET MVC - 登録のチュートリアルも確認できます。私のアプリケーションでは、この機能を持たず、ウェブサイトでリンクが利用できないため、ユーザーの登録確認を使用していません。

+0

私はこれを試しましたが、うまくいきませんでした。 result.succeededがfalseを返した場合、ファイルにエラーを出力するようにしました。しかし、アカウント作成時にエラーはありませんでした。そして、データベースへの私の接続は、私のウェブサイトを通じてクライアントのための情報を格納する私の他のテーブルに追加できるように正常に動作しています。 – Curtis

+0

そうですね、データベースへの接続は成功です。こちらのチュートリアルはhttp://tektutorialshub.com/asp-net-identity-tutorial-user-login-and-registration/です。かなり基本的ですが、それはあなたのユーザーを登録するのに役立ちます。いくつかのSystem.Diagnostics.Debug.WriteLine( "")を追加して、使用している変数が正しいかどうかをチェックし、デバッグモードでアプリケーションを起動して、バックグラウンドで何が起きているのかを確認してください。 –

関連する問題