2016-07-29 21 views
1

、MVCは、私がASP.Net MVC無効なログイン試行

無効なログイン試行を得ます。

私はログインしようとします。 UserNameとPasswordを使用してログインしたいだけなので、私は電子メールのリファレンスをコメントアウトしました。デバッグするときに、値が正しいことを確認し、表の値をチェックして、UserNameまたはPasswordを長くしてチェックアウトする隠し文字がないことを確認します。ここで

は私のコードです:

AccountViewModels.cs:

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

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

     [Required] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [Display(Name = "Remember me?")] 
     public bool RememberMe { get; set; } 
    } 

Login.cshtml:

<div class="row"> 
    <div class="col-md-8"> 
     <section id="loginForm"> 
      @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Use a local account to log in.</h4> 
       <hr /> 
       @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
       @*<div class="form-group"> 
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" }) 
        </div> 
       </div>*@ 
       <div class="form-group"> 
       @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) 
       <div class="col-md-10"> 
        @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) 
        @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" }) 
       </div> 
       </div> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
         @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <div class="checkbox"> 
          @Html.CheckBoxFor(m => m.RememberMe) 
          @Html.LabelFor(m => m.RememberMe) 
         </div> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" value="Log in" class="btn btn-default" /> 
        </div> 
       </div> 
       <p> 
        @Html.ActionLink("Register as a new user", "Register") 
       </p> 
       @* Enable this once you have account confirmation enabled for password reset functionality 
        <p> 
         @Html.ActionLink("Forgot your password?", "ForgotPassword") 
        </p>*@ 
      } 
     </section> 
    </div> 
    <div class="col-md-4"> 
     <section id="socialLoginForm"> 
      @Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl }) 
     </section> 
    </div> 
</div> 

AccountController.cs:

// POST: /Account/Login 
     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
     { 
      if (!ModelState.IsValid) 
      { 
       return View(model); 
      } 

      // This doesn't count login failures towards account lockout 
      // To enable password failures to trigger account lockout, change to shouldLockout: true 
      var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 
      switch (result) 
      { 
       case SignInStatus.Success: 
        return RedirectToLocal(returnUrl); 
       case SignInStatus.LockedOut: 
        return View("Lockout"); 
       case SignInStatus.RequiresVerification: 
        return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
       case SignInStatus.Failure: 
       default: 
        ModelState.AddModelError("", "Invalid login attempt."); 
        return View(model); 
      } 
     } 

私はかなりの使用テンプレートは私はインターネット上で見つけたものに応じてすべてを変更したので、何が間違っているのか理解できません。それが動作するように思える......

+0

オンにしてsslを有効にしましたか?あなたのウェブサイトがデフォルトでアドレスの先頭にhttps://を持っているかどうかを知るには良い方法です。 – Abob

+0

'AccountController'の' result'の値は何ですか?奇妙なことに、ロジックが間違っているのではなく、信任状*が本当に正しいことを完全に確かめましたか?おそらく別のローカルアカウントを作成してログインしてみてください。 –

+0

あなたの答えの助けを借りて、私は問題を理解しました。コードを書いているときに、登録時にいくつかの状況によってテストや失敗を取得すると、私はSQLテーブルにないユーザー名を持っていました。これらの値は明らかにどこかに保存されていますので、何とか削除する必要があります。この疑問に正しく答えるために、誰でもこれらの悪意のあるユーザー名を取り除くための解決策を提供できますか? –

答えて

0

モデル.UserNameは、電子メールまたはUserNameの2つのフィールドと比較することができます。 使用するフィールドを定義するにはApp_Start \ IdentityConfig.csに行きます。

私はRequireUniqueEmailがtrue(電子メールを使用)であると思います。これをfalse(UserName)に変更すると問題が解決するはずです。

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 
    { 
     var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 
     manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
     { 
      RequireUniqueEmail = false 
     }; 
+0

ご意見ありがとうございます。私はequireUniqueEmailをfalseに変更しましたが、動作しませんでした。 Abob78、私は私のローカルマシン上でこれを実行しており、現在の変更でまだそれを公開していません。 Geoff James氏は、次のように説明しています。var result = SignInManager.PasswordSignInAsync(model.UserName、model.Password、model.RememberMe、shouldLockout:false);結果は "Failure"と等しいです。モデル。ユーザー名とモデル。パスワードはどちらも正しいです。 –

0

アカウントの登録方法を指定していないため、テンプレートの仕組みを見てみましょう。
ウェブサイトから登録すると、あなたのメールアドレスもあなたのユーザー名になります。ウェブサイトにログインしてメールを入力すると、入力しなければならないメールはユーザー名と同じですので、成功します。
ただし、ウェブサイトに登録しておらず、ユーザー名を電子メールと異なると指定した場合は、ユーザー名を入力する必要があります。あなたはデータベースからあなたのユーザー名を見ることができます。

関連する問題