真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Nancy之Forms驗(yàn)證-創(chuàng)新互聯(lián)

授權(quán)幾乎是所以系統(tǒng)都不可或缺的部分,在Nancy中怎么授權(quán)呢?我們這篇博文來(lái)說(shuō)一下Nancy的Forms授權(quán)。

三山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

首先在NuGet上安裝Nancy.Authentication.Forms

Nancy之Forms驗(yàn)證

Nancy的Forms驗(yàn)證得實(shí)現(xiàn)IUserMapper接口,用戶類實(shí)現(xiàn)IUserIdentity接口(為了方便,我把DB的User,Model的User全合成一個(gè)User)

User.cs

using Nancy.Security;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace TestSelfHostWeb
{
    public class User : IUserIdentity
    {
        public User()
        {
        }
        public User(string userName)
        {
            UserName = userName;
        }
        /// 
        /// 實(shí)現(xiàn)接口的成員
        /// 
        public string UserName
        {
            get;
            set;
        }
 
        public string Password
        {
            get;
            set;
        }
 
        public string Role
        {
            get;
            set;
        }
        /// 
        /// 這個(gè)是Nancy授權(quán)中必須的
        /// 
        public Guid GUID
        {
            get;
            set;
        }
        /// 
        /// 實(shí)現(xiàn)接口的成員
        /// 
        public IEnumerable Claims
        {
            get;
            set;
        }
    }
}

UserMapper.cs

using Nancy.Authentication.Forms;
using System;
using System.Collections.Generic;
using System.Linq;
using Nancy;
using Nancy.Security;
 
namespace TestSelfHostWeb
{
    class UserMapper : IUserMapper
    {
        //這個(gè)用戶集合可以來(lái)自數(shù)據(jù)庫(kù)
        static List _users;
        static UserMapper()
        {
            //初始化驗(yàn)用戶數(shù)據(jù)
            _users = new List();
            _users.Add(new User() { UserName = "aaa", Password = "111111", GUID = new Guid("33e67c06-ed6e-4bd7-a5b0-60ee0fea890c"), Role = "admin" });
            _users.Add(new User() { UserName = "bbb", Password = "222222", GUID = new Guid("fba4be7d-25af-416e-a641-a33174f435d1"), Role = "user" });
        }
        /// 
        /// 實(shí)現(xiàn)接口的成員,獲取用戶的角色,以便驗(yàn)證授權(quán)
        /// 
        /// 
        /// 
        /// 
        public IUserIdentity GetUserFromIdentifier(Guid identifier, NancyContext context)
        {
 
            var user = _users.FirstOrDefault(u => u.GUID == identifier);
            return user == null
                         ? null
                         : new User(user.UserName) { Claims = new string[] { user.Role } };
        }
        /// 
        /// 驗(yàn)證用戶,驗(yàn)證成功返回用戶的GUID,這是規(guī)定
        /// 
        /// 
        /// 
        /// 
        public static Guid? ValidateUser(string userName, string password)
        {
            var user = _users.FirstOrDefault(u => u.UserName == userName && u.Password == password);
 
            if (user == null)
            {
                return null;
            }
            return user.GUID;
        }
    }
}

Bootstrapper.cs

using Nancy;
using Nancy.Bootstrapper;
using Nancy.TinyIoc;
using Nancy.Authentication.Forms;

namespace TestSelfHostWeb
{
    public class Bootstrapper : DefaultNancyBootstrapper
    {
        protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
        {
            base.RequestStartup(container, pipelines, context);
            //驗(yàn)證配置文件
            var formsAuthConfiguration = new FormsAuthenticationConfiguration()
            {
                RedirectUrl = "~/login",//無(wú)驗(yàn)證跳轉(zhuǎn)的路由
                UserMapper = container.Resolve()//用戶對(duì)應(yīng)的Mapper
            };
            //開啟驗(yàn)證
            FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
 
        }
    }
}

Login.cs

using Nancy;
using Nancy.Authentication.Forms;
using Nancy.ModelBinding;
using System;
 namespace TestSelfHostWeb.Modules
{
    public class LoginModule : NancyModule
    {
        public LoginModule()
        {
            Get["/login"] = parameters =>
            {
                //用戶名和密碼驗(yàn)證失敗的標(biāo)識(shí)
                ViewBag["error"] = Request.Query.error;
                return View["login"];
            };
 
            Post["/login"] = parameters =>
              {
 
                  var user = this.Bind();
 
                 var guid= UserMapper.ValidateUser(user.UserName, user.Password);
 
                  if (guid == null)
                  {
                      //按用戶名密碼查詢不到時(shí)作的標(biāo)識(shí)
                      return this.LogoutAndRedirect("~/login?error=true");
                  }
                  DateTime? expiry = null;
                  //登錄后跳轉(zhuǎn)頁(yè)面,必需用戶的GUID
                  return this.LoginAndRedirect(guid.Value, expiry);
                 
              };
        }
    }
}

login.cshtml

@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase



    
    Login
    
        body {
            text-align: center;
        }
    


    
        UserName:
        Password:
        
        @if (ViewBag["error"])
        {
            check username or password please
        }
    

Index.cs

using Nancy;
using Nancy.Security;
 namespace TestSelfHostWeb.Modules
{
    public class IndexModule : NancyModule
    {
        public IndexModule()
        {
            //開啟全局驗(yàn)證
            this.RequiresAuthentication();
            Get["/"] = parameters =>
            {
                //開啟角色驗(yàn)證,只有該角色可以訪問(wèn)本路由
                this.RequiresClaims("admin");
                return View["index"];
            };
        }
    }
}

Index.cshtml同上篇的indexx.cshtml

到了test的時(shí)刻了

啟動(dòng)host(注意以管理員身份運(yùn)行)

訪問(wèn)網(wǎng)站的主頁(yè),如下圖,會(huì)跳轉(zhuǎn)到登記頁(yè),這是因?yàn)閕ndex.cs的IndexModule中開啟了this.RequiresAuthentication()驗(yàn)證,為什么會(huì)跳轉(zhuǎn)到login路由中呢,是因?yàn)锽ootstrapper中formAuthConfiguration中的RedirectUrl設(shè)置。

Nancy之Forms驗(yàn)證

如果用戶名或密碼錯(cuò)誤 ,會(huì)得到提示:

Nancy之Forms驗(yàn)證

如果用戶名密碼正確:

Nancy之Forms驗(yàn)證

如果不具備權(quán)限的人(UserName:bbb,Passowrd:222222)登錄,會(huì)報(bào)403錯(cuò)誤(這個(gè)不太友下,下篇博客解決)

Nancy之Forms驗(yàn)證

這樣就能輕量級(jí)的按解色來(lái)授權(quán)我們的系統(tǒng)了。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。


網(wǎng)頁(yè)標(biāo)題:Nancy之Forms驗(yàn)證-創(chuàng)新互聯(lián)
分享鏈接:http://weahome.cn/article/dohdcd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部