2017-11-14 12 views
0

私はADO.netを使用してASP MVCを開発しています。私は、ユーザーのログイン後にログインフィールドを非表示にしようとしています。どのようにログインしているユーザーからログインフィールドを非表示

実際、ホームページからの認証後、ユーザーはプロフィールページにリダイレクトされます。問題は、ユーザーがホームページに戻るとき、ユーザーは常にログインフィールドを見つけることです。

デバッガによれば、セッション["currentUser"]は常にnullのままで、スクリプトがレンダリングされます。

devツールでもエラーが見つかりませんでした。

これは私が試したものです:

@if (Session["currentUser"] != null) 
{ 
    <script type='text/javascript'> 
$(document).ready(function(){ 
    $("#login").hide(); 
}); 
    </script> 
} 
     <div class="login" id="login"> 
      @*@RenderPage("~/Views/Home/Login.cshtml")*@ 
      <link href="~/Content/toastr.css" rel="stylesheet" /> 
      <div class="main-w3l"> 
       <div class="w3layouts-main" style="background-image:url('/template/web/images/bg3.jpg'); margin-top:50px;"> 
        <h2>Login Now</h2> 


        @using (Html.BeginForm("Login", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
        { 


         @Html.AntiForgeryToken() 
         @Html.ValidationSummary(true) 

         <input value="E-MAIL" name="Email" type="email" required="" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'E-Mail';}" /> 
         <input value="PASSWORD" name="Password" type="password" required="" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'password';}" /> 
         <span><input type="checkbox" />Remember Me</span> 
         <h6><a href="#">Forgot Password?</a></h6> 
         <div class="clear"></div> 
         <input type="submit" value="login" name="login"> 

        } 

        <p>Don't Have an Account ?<a href="#" onclick="@("window.location.href='" + @Url.Action("Create", "Client") + "'") ;">Register Now</a></p> 
       </div> 
      </div> 

UPDATE: コントローラ:

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

    database_Access_layer.db dblayer = new database_Access_layer.db(); 


    [HttpPost] 
    public ActionResult Login(FormCollection fc, string LastName, string Email) 
    { 

     int res = dblayer.Admin_Login(fc["Email"], fc["Password"]); 
     if (res == 1) 
     { 
      Session["currentUser"] = Email; 
      string z = Email; 
      connection(); 
      con.Open(); 
      SqlCommand command = new SqlCommand("select Email from Client", con); 

      List<string> result = new List<string>(); 
      using (var reader = command.ExecuteReader()) 
      { 
       while (reader.Read()) 
        result.Add(reader.GetString(0)); 
       con.Close(); 
      } 
      foreach (string x in result) 
      { 
       if (x == z) 
       { 

        SqlCommand command2 = new SqlCommand($"select LastName from Client WHERE Email= '{x}' ", con); 
        con.Open(); 
        string y = command2.ExecuteScalar().ToString(); 
        con.Close(); 
        Session["currentUser"] = y; 

       } 
      } 

      return RedirectToAction("Profil", "Client"); 
      Session.RemoveAll(); 


     } 
     else { 

      TempData["msg"] = " Email or Password is wrong !"; 
      return RedirectToAction("Index", "Home"); 

     } 

    } 
+0

であるあなたの行動は次のようになりますか? .netコアまたは.netフレームワーク? –

+1

mvc 5、.net core – Exact

+0

よくmvc 5は.netコアの下にありません。 .netコアにはmvc 6があり、mvc 5には以下のものがあります。net framework –

答えて

1

ストアユーザーを乗り切る知っているからトークン/関連情報がログインしていますかセッション/キャッシュではなく、ユーザーログイン機能を書いている場所であれば、サービスを書くことも、jquery/javascriptを使ってアクセスすることもできます。

+0

あなたはもっと説明できますか? – Exact

2

ログインに役立つシステムが組み込まれています。セッション変数は、いくつかの理由で使用すべきではありません。ログインを設定するには

、あなたは、コントローラ内部で、次の機能を使用することができます。

FormsAuthentication.SetAuthCookie(UserName, remember); 

同様にあなたがログアウトするためのFormsAuthentication.SignOut()を使用することができます。

今すぐあなたのかみそり内のか、ユーザーがログインしているかどうかを確認するためにUser.Identity.IsAuthenticatedをチェックすることができる任意のコントローラインチ

仕事に、この機能のために、また、あなたはウェブの下に、次のしていることを確認する必要があります。あなたの<system.web>下の設定、:あなたはこのログイン機能を利用したい場合は、あなたのホームページは異なる別のCSHTMLページにログインフォームを追加することができます

<authentication mode="Forms"> 

</authentication> 

さらにより。このページは、場所Home/Loginにあるとします。これで、web.config内の上記のコードを次のように変更できます。

<authentication mode="Forms"> 
    <forms loginUrl="~/Home/Login" timeout="2880" /> 
</authentication> 

デフォルトのログインページが割り当てられます。ユーザーがログインしていない場合、URLにアクセスする必要がある場合は、この場所に自動的にリダイレクトされます。アクションが認証されるように指定するには、アクションの前に[Authorize]を使用するか、コントローラー全体が必要な場合はコントローラー全体を使用します認可された

[Authorize] 
public ActionResult Index(){ 
    return View() 
} 

が最後にあなたのサンプル HomeControllerはこのような何かを見ることができます::これは.NETのバージョン

public class HomeController : Controller 
{ 

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

    [HttpGet] 
    public ActionResult Login() 
    { 
     return View(); // for the login form 
    } 

    [HttpPost] 
    public void Login(string UserName, .... <other fields>) 
    { 
     // validate your login first here 
     FormsAuthentication.SetAuthCookie(UserName, true); 
    } 

} 
+0

私はあなたの提案を試みましたが、私はEFを使用していないと言いたいのですが、私はアカウントコントローラを持っていません、ログインアクションはHomeControllerにあります。それを修正するプロジェクト – Exact

+1

これはEFを使用しません。アカウントコントローラは単なる例です。あなたはHomeController内のすべてを行うこともできます。しかし、あなたが持っているログインアクションはあなたのログイン情報を提出するためのものです。あなたはどこでも別の行動をとる必要があります。ログインHTMLフォームのビューを返します。 ビューフォルダ内のメインフォルダではなく、メインフォルダ内のweb.configを変更する必要があります。 –

+0

別のビューを返すログインアクションがあります。コード – Exact

関連する問題