Nancy's Forms の簡単な使い方 authentication_html/css_WEB-ITnose

WBOY
リリース: 2016-06-21 08:56:57
オリジナル
1213 人が閲覧しました

1. はじめに

Microsoft が発表した ASP.NET Identity テクノロジについては、誰もが聞いたことがあると思います。

偶然にも、Nancy にも Authentication と呼ばれる同様のテクノロジがあります。どちらも同様のセキュリティ テクノロジをいくつか使用しています

(ASP.NET Identity の内部実装は見ていません。その簡単な使用法から判断します)

正式な紹介を始める前に、ASP.NET Identity に関する優れた記事をいくつかお勧めします

r01cn の ASP.NET Identity シリーズ チュートリアル (目次)

Jesse の MVC5 - ASP .NET Identity ログインの原則 - クレームベース認証と OWIN

それでは、デモを使用してフォーム認証を簡単に使用する方法を紹介しましょう

2. 簡単な使用方法

1) 、空の asp.net プロジェクトを作成します

2)、NuGet を通じて対応するパッケージをインストールします

1       Install-Package Nancy2      Install-Package Nancy.Hosting.Aspnet3       Install-Package Nancy.Authentication.Forms4       Install-Package Dapper
ログイン後にコピー

データベース アクセスに関しては、Dapper もインストールしました

3)、データテーブル

 1 CREATE TABLE [dbo].[SystemUser]( 2     [SystemUserId] [uniqueidentifier] NOT NULL, 3     [SystemUserName] [nvarchar](50) NOT NULL, 4     [SystemUserPassword] [nvarchar](50) NOT NULL, 5  CONSTRAINT [PK_SystemUser] PRIMARY KEY CLUSTERED  6 ( 7     [SystemUserId] ASC 8 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 9 ) ON [PRIMARY]10 GO
ログイン後にコピー

を作成し、同時に 2 つのデータをテーブルに挿入しました

1 INSERT INTO [dbo].[SystemUser]([SystemUserId],[SystemUserName],[SystemUserPassword])2 VALUES(newid(),'catcher','123')3 INSERT INTO [dbo].[SystemUser]([SystemUserId],[SystemUserName],[SystemUserPassword])4 VALUES(newid(),'admin','123')
ログイン後にコピー

注: これはデモですので、パスワードは暗号化されません

4)、対応するフォルダーを作成します

Models はモデルを保存するために使用されます

Modules は対応する操作を保存するために使用されます

ビューはビューの保存に使用されます

5)、モデル SystemUser.cs を書き込みます

1     public class SystemUser2     {3         public Guid SystemUserId { get; set; }4         public string SystemUserName { get; set; }5         public string SystemUserPassword { get; set; }6     }   
ログイン後にコピー

6)、HomeModule.cs を書き込みます

 1 using Dapper; 2 using Nancy; 3 using Nancy.Authentication.Forms; 4 using Nancy.ModelBinding; 5 using NancyDemoForFormsauthentication.Models; 6 using System.Data; 7 using System.Data.SqlClient; 8 using System.Linq; 9 namespace NancyDemoForFormsauthentication.Modules10 {11     public class HomeModule : NancyModule12     {13         public HomeModule()14         {15             Get["/"] = _ =>16             {17                 return View["index"];18             };19             Get["/login"] = _ =>20             {21                 return View["login"];22             };23             Post["/login"] = _ =>24             {25                 var loginUser = this.Bind<SystemUser>();26                 SystemUser user = GetValidUser(loginUser.SystemUserName, loginUser.SystemUserPassword);27                 if (user == null)28                 {29                     return Response.AsText("出错了", "text/html;charset=UTF-8");30                 }31                 return this.LoginAndRedirect(user.SystemUserId, fallbackRedirectUrl: "/secure");32             };33         }34         private readonly string sqlconnection =35                "Data Source=127.0.0.1;Initial Catalog=NancyDemo;User Id=sa;Password=dream_time1314;";36         private SqlConnection OpenConnection()37         {38             SqlConnection connection = new SqlConnection(sqlconnection);39             connection.Open();40             return connection;41         }42         private SystemUser GetValidUser(string name, string pwd)43         {44             using (IDbConnection conn = OpenConnection())45             {46                 const string query = "select * from SystemUser where SystemUserName=@SystemUserName and SystemUserPassword=@SystemUserPassword";47                 return conn.Query<SystemUser>(query, new { SystemUserName = name, SystemUserPassword = pwd }).SingleOrDefault();48             }49         }50     }51 }  
ログイン後にコピー

このうち、ログインポストメソッド

では静的メソッド LoginAndRedirect が使用されています。 このメソッドは ModuleExtensions.cs にあり、戻り値の型は Response

1         public static Response LoginAndRedirect(this INancyModule module, Guid userIdentifier, DateTime? cookieExpiry = null, string fallbackRedirectUrl = "/")2         {3             return FormsAuthentication.UserLoggedInRedirectResponse(module.Context, userIdentifier, cookieExpiry, fallbackRedirectUrl);4         }
ログイン後にコピー

であることがわかります。メソッド名 これが何のためにあるのかを理解してください。

中国語の文字化けを防ぐため、Response.AsText の後に 2 番目のパラメータもあります。 !

7)、対応するビューを書き込みます

index.html

 1 <!DOCTYPE html> 2 <html> 3 <head> 4     <title></title> 5     <meta charset="utf-8" /> 6 </head> 7 <body> 8     <h2>Nancy之基于Forms authentication的简单使用</h2> 9     <p>访问需要权限的页面</p>10     <a href="/secure">secure</a>11 </body>12 </html>
ログイン後にコピー

login.html

 1 <!DOCTYPE html> 2 <html> 3 <head> 4     <title></title> 5     <meta charset="utf-8" /> 6 </head> 7 <body> 8     <form method="post" action="/login"> 9         <label>姓名:</label><input type="text" name="SystemUserName" /><br />10         <label>密码:</label><input type="password" name="SystemUserPassword" /><br />11         <input type="submit" />12     </form>13 </body>14 </html>
ログイン後にコピー

8)、SecureModule.cs を書き込みます

 1 using Nancy; 2 using Nancy.Security; 3  4 namespace NancyDemoForFormsauthentication.Modules 5 { 6     public class SecureModule : NancyModule 7     { 8         public SecureModule() 9         {10             this.RequiresAuthentication();11             Get["/secure"] = _ =>12             {13                 return "Hello ," + this.Context.CurrentUser.UserName;14             };15         }16     }17 }  
ログイン後にコピー

その中で

1 this.RequiresAuthentication();
ログイン後にコピー

この文が鍵です! !合格するには検証が必要であることを示します。 Nancy.Security 名前空間

にあり、認証されたアクセス後に現在のユーザー名が出力されます。

9)、Bootstraper.cs を作成します

 1 using Nancy; 2 using Nancy.Authentication.Forms; 3 using Nancy.TinyIoc; 4 using Nancy.Bootstrapper; 5 namespace NancyDemoForFormsauthentication 6 { 7     public class Bootstrapper : DefaultNancyBootstrapper 8     { 9         protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)10         {11             base.ConfigureRequestContainer(container, context);12             container.Register<IUserMapper, UserMapper>();13         }14         protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)15         {16             base.RequestStartup(container, pipelines, context);17             var formsAuthConfiguration = new FormsAuthenticationConfiguration18             {19                 RedirectUrl = "~/login",20                 UserMapper = container.Resolve<IUserMapper>(),21             };22             FormsAuthentication.Enable(pipelines, formsAuthConfiguration);23         }24     }25 }  
ログイン後にコピー

これは重要なステップです。 ! !

RequestStartup で FormsAuthentication を有効にするには! !

同時に、UserMapper を登録するために FormsAuthenticationConfiguration

を構成する必要があるため、次のステップは UserMapper

10) を実装し、UserMapper.cs<🎜 を記述することです。 >

 1 using Dapper; 2 using Nancy; 3 using Nancy.Authentication.Forms; 4 using Nancy.Security; 5 using NancyDemoForFormsauthentication.Models; 6 using System; 7 using System.Data; 8 using System.Data.SqlClient; 9 using System.Linq;10 namespace NancyDemoForFormsauthentication11 {12     public class UserMapper : IUserMapper13     {14         public IUserIdentity GetUserFromIdentifier(Guid identifier, NancyContext context)15         {16             using (IDbConnection conn = OpenConnection())17             {18                 const string query = "select * from SystemUser where SystemUserId=@SystemUserId";19                 var user = conn.Query<SystemUser>(query, new { SystemUserId = identifier }).SingleOrDefault();20                 if (user == null)21                 {22                     return null;23                 }24                 else25                 {26                     return new UserIdentity27                     {28                         UserName = user.SystemUserName,29                         Claims = new[] { "SystemUser"}30                     };31                 }32             }33         }34         private readonly string sqlconnection =35                 "Data Source=127.0.0.1;Initial Catalog=NancyDemo;User Id=sa;Password=dream_time1314;";36         private SqlConnection OpenConnection()37         {38             SqlConnection connection = new SqlConnection(sqlconnection);39             connection.Open();40             return connection;41         }42     }43 }  
ログイン後にコピー
UserMapper は IUserMapper インターフェイスを実装する必要があります。同時に、IUserIdentity インターフェイスを実装したオブジェクトが返されます。

11)、UserIdentity.cs を書き込みます

 1 using Nancy.Security; 2 using System.Collections.Generic; 3 namespace NancyDemoForFormsauthentication 4 { 5     public class UserIdentity : IUserIdentity 6     { 7         public string UserName { get; set; } 8         public IEnumerable<string> Claims { get; set; } 9     }10 }  
ログイン後にコピー
ここですべての作業が完了しました。効果を見てみましょう

安全なリンクにアクセスすると、自動的にログイン インターフェイスにジャンプすることがわかりました。 !

ユーザー名とパスワードを入力します

ログインに成功し、安全なページに戻ります。

間違ったユーザー名とパスワードを入力した場合

最後に、これがサンプルコードです:

https : //github.com/hwqdt/Demos/tree/master/src/NancyDemoForFormsauthentication

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!