私はNancyFxを使用して、ユーザーが ajax コントロールを使用してログインおよびログアウトできる単純な Web サイトを作成しています。
Nancy によるフォーム認証に関するドキュメントを読み、必要な手順をすべて完了したと思います。
- Nancy.Authentication.Forms パッケージをインストールする
- IUserMapper を実装する
- ログインとログアウトを処理するルートを実装する
- フォーム認証を構成して有効にする
ログインを呼び出した後、リクエストに現在のユーザーが設定されていないという問題があります。ログインが実行された後に設定された Cookie を確認できます。ただし、ユーザー マッパーは呼び出されません。this.RequiresAuthentication(); を使用して、または使用せずにルートをリクエストしようとしました。まだユーザーがいません。
ステップ 4 の Bootstrapper の実装は次のとおりです。
public class Bootstrapper : DefaultNancyBootstrapper
{
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
container.Register<ISessionFactory>((c, p) => SessionFactory.Factory);
}
protected override void ConfigureConventions(NancyConventions conventions)
{
base.ConfigureConventions(conventions);
conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("assets", @"content/assets"));
conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("application", @"content/application"));
}
protected override void ConfigureRequestContainer(TinyIoCContainer container, NancyContext context)
{
base.ConfigureRequestContainer(container, context);
container.Register<IUserMapper, UserMapper>();
}
protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
base.RequestStartup(container, pipelines, context);
var formsAuthConfiguration =
new FormsAuthenticationConfiguration()
{
RedirectUrl = "~/",
UserMapper = container.Resolve<IUserMapper>()
};
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);
}
}
ステップ 3 のログインとログアウトのロジックは次のとおりです。
Post["/login"] = x =>
{
//Verify here, hardcode for testing
string email = "test@example.com";
User user = ExecuteCommand(new FetchUser(email));
this.LoginWithoutRedirect(user.Session);
return new { email = user.Email, authorized = true, status = "okay" };
};
Post["/logout"] = x =>
{
return this.Logout("~/");
};
私の IUsermapper は、指定された ID を持つデータベースからユーザーを検索するだけです。RequestStartup が IUserMapper を解決するときに構築されることがわかりますが、get GetUserFromIdentifier 関数への呼び出しはありません。
どんな助けでも素晴らしいでしょう。