2017-12-21 9 views
0

セルフホストナンシーでフォーム認証を作成しようとしています。単純にするために、ユーザーデータ用のデータベースはありません。 List.Weに保存された2人のユーザーが持っている:セルフホストナンシー:Nancy.Authentication.Forms.dllでNullReferenceExceptionが発生しました。正しいユーザー/パスワードが入力されたとき

U:管理者P:passowrd

U:ユーザーP:パスワード

私が使用しています:

Nancy.1.4.4 
Nancy.Authentication.Forms.1.4.1 
Nancy.Hosting.Self.1.4.1 
Nancy.Viewengines.Razor.1.4.3 
Microsoft.AspNet.Razor.2.0.30506.0 

マイログインモジュールを:間違ったユーザー/パスワードを入力すると

Get["/login"] = x => 
      { 
       Model.login = new LoginModel() { Error = this.Request.Query.error.HasValue, ReturnUrl = this.Request.Url }; 
       return View["login", Model]; 
      }; 

      Post["/login"] = x => 
      { 
       var userGuid = MyUserMapper.ValidateUser((string) this.Request.Form.Username, 
        (string) this.Request.Form.Password); 

       if (userGuid == null) 
       { 
        return Context.GetRedirect("~/login?error=true&username=" + 
               (string) this.Request.Form.Username); 
       } 

       DateTime? expiry = null; 
       if (this.Request.Form.RememberMe.HasValue) 
       { 
        expiry = DateTime.Now.AddDays(7); 
       } 


       return this.LoginAndRedirect(userGuid.Value, expiry); 

すべてがok.Whenされ、正しいユーザー/パスワードが入力されるとNullReferenceExceptionはLoginAndRedirectで発生します。

return this.LoginAndRedirect(userGuid.Value, expiry); 


An exception of type 'System.NullReferenceException' occurred in Nancy.Authentication.Forms.dll but was not handled in user code 

コールスタック:

> NancyLinuxTest.exe!NancyLinuxTest.Models.MainModule..ctor.AnonymousMethod__16(dynamic x) Line 49 C# 

スタックトレース:

Nancy.Authentication.Forms.FormsAuthentication.EncryptAndSignCookie(String cookieValue, FormsAuthenticationConfiguration configuration)\r\n at Nancy.Authentication.Forms.FormsAuthentication.BuildCookie(Guid userIdentifier, Nullable`1 cookieExpiry, FormsAuthenticationConfiguration configuration)\r\n at Nancy.Authentication.Forms.FormsAuthentication.UserLoggedInRedirectResponse(NancyContext context, Guid userIdentifier, Nullable`1 cookieExpiry, String fallbackRedirectUrl)\r\n at Nancy.Authentication.Forms.ModuleExtensions.LoginAndRedirect(INancyModule module, Guid userIdentifier, Nullable`1 cookieExpiry, String fallbackRedirectUrl)\r\n at NancyLinuxTest.Models.MainModule.<.ctor>b__16(Object x) in d:\\prototype-prices\\for_delete\\#proto\\NancyFormAuthTest\\NancyFormAuthTest\\Modules\\MainModule.cs:line 55\r\n at CallSite.Target(Closure , CallSite , Func`2 , Object)\r\n at Nancy.Routing.Route.<>c__DisplayClass4.<Wrap>b__3(Object parameters, CancellationToken context) 

userGuid.Valueがnullではありません。

Full source here

+0

NullReferenceExceptionはライブラリ内で発生するため、正規のNRE質問の複製ではありません。 – CodeCaster

+0

その行のuserGuidの正確な値は、55e1e49e-b7e8-4eea-8459-7a906ac4d4c0です.ThatsはUser Listと同じGuidです。 [ソース](https://github.com/NancyFx/Nancy/blob/be4f8d42076e4e568a3742715437868e6c7d05af/src/Nancy.Authentication.Forms/ModuleExtensions.cs) –

+0

@mjwillsは[ナンシー拡張メソッド](https://github.com)です。 /NancyFx/Nancy/blob/master/src/Nancy.Authentication.Forms/ModuleExtensions.cs)。これは私がフレームワークを嫌う理由の一つです、デバッグは地獄です。 NREと "Oops!"を投げ捨て、開発者は複数回主張しています_ "エラーが発生した場合、コードは複雑でコードを単純化します_"。それは実際にはプログラミングにとっての実用的なアプローチではありません。 OPは起動時に何かを登録したり呼び出すのを忘れていた可能性があり、実行時にフレームワークが爆発してしまいます。 – CodeCaster

答えて

1

私の問題が見つかりました。間違ったBootstrapperを呼び出していました:)。

0
private static string EncryptAndSignCookie(string cookieValue, FormsAuthenticationConfiguration configuration) 
{ 
    var encryptedCookie = configuration.CryptographyConfiguration.EncryptionProvider.Encrypt(cookieValue); 
    var hmacBytes = GenerateHmac(encryptedCookie, configuration); 
    var hmacString = Convert.ToBase64String(hmacBytes); 

    return String.Format("{1}{0}", encryptedCookie, hmacString); 
} 

v.1.4.1に)NREをトリガすることができる唯一のラインはconfiguration服従です。コードを見ると、Enableを呼び出して設定されます。あなたが調査を開始し、Enableが呼び出されたときに、どの設定が渡されるかを確認してください。

免責事項:ナンシーが何であるかわかりません。これは基本的なコードのデバッグすべきです。すべてオープンソースです。ちょうどステップスルー。

関連する問題