• WebApi设置HttpContext.Current.User


    1、Web.config配置上system.web节点下加入以下配置

    <system.web>
        <authentication mode="Forms">
          <forms name=".wechat" loginUrl="url" timeout="30" protection="All" defaultUrl="/index.html" />
        </authentication>
        <httpCookies httpOnlyCookies="true" requireSSL="true" />
      </system.web>
    

    2、上代码

    using Newtonsoft.Json;
    using System;
    using System.Security.Principal;
    using System.Web;
    using System.Web.Http;
    using System.Web.Security;
    
    namespace KMHC.CTMS.DrugStore.Controllers
    {
        public class BaseApiController : ApiController
        {
            protected void SignIn(dynamic user)
            {
                if (user == null)
                    return;
                var httpContext = HttpContext.Current;
    
                var version = 1;
                var name = user.OpenId;
                var now = DateTime.Now.ToLocalTime();
                var expiration = now.Add(TimeSpan.FromDays(30));
                var isPersistent = true;
                var userData = JsonConvert.SerializeObject(user);
    
                var ticket = new FormsAuthenticationTicket(version, name, now, expiration, isPersistent, userData, FormsAuthentication.FormsCookiePath);
    
                var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    
                var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
                {
                    HttpOnly = true,
                    Secure = FormsAuthentication.RequireSSL,
                    Path = FormsAuthentication.FormsCookiePath
                };
                cookie.Expires = ticket.Expiration;
                if (FormsAuthentication.CookieDomain != null)
                {
                    cookie.Domain = FormsAuthentication.CookieDomain;
                }
    
                var url = HttpContext.Current.Request.Url.ToString();
                if (!string.IsNullOrEmpty(url) && url.StartsWith("https"))
                {
                    cookie.Secure = true;
                }
    
                httpContext.Response.Cookies.Add(cookie);
    
                httpContext.User = new GenericPrincipal(new FormsIdentity(ticket), new string[] { "Wechat" });
            }
    
            protected string OpenId
            {
                get
                {
                    return this.User.Identity.Name;
                }
            }
    
            protected bool IsAuthenticated
            {
                get
                {
                    return this.User.Identity.IsAuthenticated;
                }
            }
    
            protected dynamic UserInfo {
                get {
                    var identity = (FormsIdentity)HttpContext.Current.User.Identity;
                    var user = JsonConvert.DeserializeObject<dynamic>(identity.Ticket.UserData);
                    return user;
                }
            }
        }
    }
    

    3、默认地址获取

    //index.html  <forms name=".wechat" loginUrl="url" timeout="30" protection="All" defaultUrl="/index.html" />
    var defaultUrl= FormsAuthentication.DefaultUrl;

      

  • 相关阅读:
    MySQL_Key值(MUL、PRI、NUL)
    MySQL删除foreign key_ERROR 1025 (HY000): Error on rename of './test_20180206/cc' to './test_20180206/#sql2-9ac-e' (errno: 152)
    MySQL-ISNULL()、IFNULL()和NULLIF()函数
    MySQL复制表-SELECT INTO FROM
    MySQL复制表-INSERT INTO SELECT
    MySQL复制表-CREATE SELECT
    MySQL_ALTER命令
    CentOS设置防火墙
    宿主机连wifi,虚拟机联网设置步骤
    二叉树遍历
  • 原文地址:https://www.cnblogs.com/lizhenhong/p/10002601.html
Copyright © 2020-2023  润新知