セルフホストナンシーでフォーム認証を作成しようとしています。単純にするために、ユーザーデータ用のデータベースはありません。 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ではありません。
NullReferenceExceptionはライブラリ内で発生するため、正規のNRE質問の複製ではありません。 – CodeCaster
その行のuserGuidの正確な値は、55e1e49e-b7e8-4eea-8459-7a906ac4d4c0です.ThatsはUser Listと同じGuidです。 [ソース](https://github.com/NancyFx/Nancy/blob/be4f8d42076e4e568a3742715437868e6c7d05af/src/Nancy.Authentication.Forms/ModuleExtensions.cs) –
@mjwillsは[ナンシー拡張メソッド](https://github.com)です。 /NancyFx/Nancy/blob/master/src/Nancy.Authentication.Forms/ModuleExtensions.cs)。これは私がフレームワークを嫌う理由の一つです、デバッグは地獄です。 NREと "Oops!"を投げ捨て、開発者は複数回主張しています_ "エラーが発生した場合、コードは複雑でコードを単純化します_"。それは実際にはプログラミングにとっての実用的なアプローチではありません。 OPは起動時に何かを登録したり呼び出すのを忘れていた可能性があり、実行時にフレームワークが爆発してしまいます。 – CodeCaster