zoukankan      html  css  js  c++  java
  • MVC Form验证 登陆和退出Cookies的设定和消除

    红色部分为重点

    1.webconfig配置

     <system.web>节点下添加
        <authentication mode="Forms">
          <forms loginUrl="~/Account/Login" timeout="2880" name=".userInfo" protection="All" path="/"></forms>
        </authentication>
    如果有如下节点则删除

    <system.webServer>
    <modules>
    <remove name="FormsAuthentication" />
    </modules>
    </system.webServer>

    2.<forms loginUrl="~/Account/Login  中的loginUrl的值的~不能省略
            public ActionResult Login(LoginViewModel login)
            {
                //验证账号密码
                AspTaskServiceClient service = new AspTaskServiceClient();  //调用svc服务
                if (service.IsLoginOk(login.UserId, Commen.Sha256(login.Password)))
                {
                   
                    AspUser user = service.GetUserInfo(login.UserId);
                    LoginViewModel userinfo = new LoginViewModel()
                    {
                        UserId = login.UserId,
                        Password = login.Password,
                        UserName = user.LoginUserName,
                        AspId = user.AspId,
                        IsAsp = user.IsAspUser ? "1" : "0"
                    };
    
                    FormsAuthentication.SetAuthCookie(JsonHelper.ToJsonString(userinfo), false);   //设置cookies
                    if (Request.QueryString["ReturnUrl"] != null)
                    {
                        if (Request.QueryString["ReturnUrl"].Contains("LogOff"))
                        {
    
                            return RedirectToAction("../Task/TaskList");
                        }
                        else
                        {
                          return  Redirect(Request.QueryString["ReturnUrl"]);
                        }
    
                    }
    
                    else return RedirectToAction("../Task/TaskList");
                }
                else
                {
                    ModelState.AddModelError("", "正しくユーザー または パスワードを入力ください。");
                    return View(login);
                }
    
            }
    

      

    3读取cookies
            protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
            {
                if (string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name)) return false;
                LoginViewModel userinfo=JsonHelper.ToObject<LoginViewModel>(HttpContext.Current.User.Identity.Name);
    
                AspTaskServiceClient service = new AspTaskServiceClient();
    
                string _userId = userinfo.UserId;
                string _password = userinfo.Password;
                if (_userId == "" || _password == "") return false;
                if (service.IsLoginOk(_userId, Commen.Sha256(_password)))
                {
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
    

      

    附:JsonHelper.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using Newtonsoft.Json;
    
    namespace xxx.Serialization.Json
    {
        public class JsonHelper
        {
            public static string ToJsonString(object obj)
            {
                return JsonConvert.SerializeObject(obj);
            }
    
       
            public static T ToObject<T>(string jsonString)
            {
                return JsonConvert.DeserializeObject<T>(jsonString);
            }
        }
    }
    

      

     sha256.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Web;
    
    namespace xxx.Controllers
    {
        public class Commen
        {
            public static string Sha256(string plainText)
            {
                SHA256Managed _sha256 = new SHA256Managed();
                byte[] _cipherText = _sha256.ComputeHash(Encoding.Default.GetBytes(plainText));
                return Convert.ToBase64String(_cipherText);
            }
        }
    }
    

      

    4.action的cookie值传入到view的js文件

            public ActionResult TaskList()
            {
                ViewBag.cookies = User.Identity.Name;
                return View();
            }
    

      

       view里的js文件

    如下

            function getUserInfo() {//获取当前用户
                user = new Object();
                var arrCookie = @Html.Raw(ViewBag.cookies);
                if (arrCookie!=null) {
                    user.userId =arrCookie["UserId"];
                    user.userName = arrCookie["UserName"]
                    user.aspId =arrCookie["AspId"];
                    user.isAspUser = arrCookie["IsAsp"]== "1" ? true : false;
                }
            }
    

      5.退出登陆

    1._LoginPartial.cshtml显示设置   必须添加引用

    @using xxxx.Serialization.Json;
    @using xxx.Models;
    
        @if (!string.IsNullOrWhiteSpace(User.Identity.Name))
        {
    
            using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
            {
                Html.AntiForgeryToken();
    
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        @Html.ActionLink(JsonHelper.ToObject<LoginViewModel>(User.Identity.Name).UserName + " 様", "", "", routeValues: null, htmlAttributes: new { title = "" })
                    </li>
                    <li><a href="javascript:document.getElementById('logoutForm').submit()">ログオフ</a></li>
    
                </ul>
            }
        }
    

      

      2.退出登陆清除cookies

            public ActionResult LogOff()
            {
      
                FormsAuthentication.SignOut();
             
                return RedirectToAction("Login", "Account");
    
    
            }
    

      

  • 相关阅读:
    Spring IoC 容器和 AOP
    MySQL 锁与事务控制
    MySQL 存储引擎的选择
    如何理解MySQL 索引最左前缀原则
    MySQL 索引
    Java 线程池
    Java多线程 ReentrantLock、Condition 实现生产者、消费者协作模式
    Java多线程并发中 CAS 的使用与理解
    Java多线程中协作机制
    Mysql-SQL生命周期-show profile
  • 原文地址:https://www.cnblogs.com/c-x-a/p/7115609.html
Copyright © 2011-2022 走看看