2017-03-18 12 views
0

MVCパターンを使用して行う必要のある学校向けのアプリケーションを作成しています。まず、簡単な登録とログオンページを作成して、DBに格納して取得できるかのように実行し、アプリケーションの残りの部分をかなり簡単に実行する必要があります。私は私のDBのために私の大学のSQLサーバーを使用して、ADO.NETエンティティデータモデルを使用しています(初めて)。ASP.NET MVC簡単なログオンページ、ユーザー名とパスワードが一致していますが、許可されていないメッセージが届いています

私はオンラインチュートリアルを利用していましたが、十分にうまくいくように見えましたが、今のところテーブルの詳細を使ってログオンしようとすると「Http 401.0 - Unauthorized」ページ。

は、私が知っている私は電子メール&パスワードボックスに入ってるものを私はラベルを使用してテストとしてDBから取得し、それらがすべて一致しているものをマッチングされます。私はそれが役立つ場合は、ASP.NET 4.5.2を使用しています。

Unauthorized page

私のテーブルは次のように私のコードは

Email (pk)(varchar) - For logon 
Password (varchar) - For logon 
First_Name (varchar) 

simple-あります。

UserLogonビュー -

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

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

ユーザーマネージャの表示 -

public class UserManager 
{ 
    private ac9555fEntities dre = new ac9555fEntities(); 
    public string GetUserPassword(string userEmail) 
    { 
     var user = from o in dre.UserTables where o.Email == userEmail select o; 
     if (user.ToList().Count > 0) 
      return user.First().Password; 
     else 
      return string.Empty; 
    } 
} 

アカウント・コントローラ -

public class AccountController : Controller 
{ 

    public ActionResult LogOn() 
    { 
     return View(); 
    } 

    // 
    // POST: /Account/LogOn 

    [HttpPost] 
    public ActionResult LogOn(UserLogon model, string returnUrl) 
    { 

     if (ModelState.IsValid) 
     { 

      UserManager userManager = new UserManager(); 
      string password = userManager.GetUserPassword(model.Email); 


      if (string.IsNullOrEmpty(password)) 
      { 

       ModelState.AddModelError("", "The user login or password provided is incorrect."); 
      } 

      if (password == model.Password) 
      { 

       FormsAuthentication.SetAuthCookie(model.Email, false); 
       if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
       { 
        return Redirect(returnUrl); 
       } 
       else 
       { 
        return RedirectToAction("Welcome", "Home"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The password provided is incorrect."); 
      } 
     } 

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

ホームコントローラ -

public ActionResult Index() 
    {   
     return View(); 
    } 

    [Authorize] 
    public ActionResult Welcome() 
    { 
     return View(); 
    } 

[ログオンビュー - 私はない/あまり十分なコードが含まれている場合、私は謝罪ん

@model WebApplication5.Models.ViewModels.UserLogon 
.... 
@using (Html.BeginForm()) 
{ 
    .... 
    @Html.EditorFor(model => model.Email) 
    .... 
    @Html.EditorFor(model => model.Password) 
    .... 
    <input type="submit" value="Log On" /> 
} 

、これはMVC/ADO.NETエンティティデータモデルを使用して、私の最初の時間です。ここや他の場所の他のものを調べることで、不要な権限の追加層があるように感じましたが、私が試したソリューションのいずれかがうまく動作しませんでした。私のコードのどこに欠陥があるの?

<system.web> 
<compilation debug="true" targetFramework="4.5.2" /> 
<httpRuntime targetFramework="4.5.2" /> 
</system.web> 
+0

ここでエラーが発生していますか? –

+0

ブラウザでは、それはあなたが意味することですか? @StephenMuecke – ACostea

+0

どのようなコード行が原因ですか? –

答えて

1

weg.configファイルのDOSでフォーム認証が使用されていないため、エラーが発生しています。しかし、あなたのコードと他の多くの問題があり

<system.web> 
    .... 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="10" /> // adjust as required 
    </authentication> 
</system.web> 

を含めるように<system.web>セクションを変更します。あなたの第二ModelState.AddModelError(..)コードは2の最初の(決して明らかにしていると 同一である必要がありますが、プレーンテキストとしてデータベースにパスワードを保存することはありません

  • (彼らはハッシュされ、塩漬けする必要が )
  • 値)が正しくありません
  • そのないあなたは、あなたのif(Url.IsLocalUrl(returnUrl) && ...コードでやろうとしていますが、ユーザーを に認証されると、それだけでどうあるべきか、本当に明確if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Welcome", "Home"); }

Security, Authentication and Authorizationの基本チュートリアルで作業し、MVCとIDの組み込み機能を使用してこれをすべて正しく処理することをお勧めします。

関連する問題