我使用NancyFx來製作一個簡單的網站,用戶可以使用ajax控件登錄和註銷。使用NancyFx進行表單身份驗證
我已閱讀Forms Authentication with Nancy的文檔,我想我已經完成了所有必需的步驟。
- 安裝Nancy.Authentication.Forms包
- 實現一個IUserMapper
- 實現途徑來處理登錄和註銷
- 配置並啓用表單驗證
我有一個問題,即在呼叫登錄後,請求沒有當前用戶設置。 執行登錄後,我可以看到一個cookie集。但是用戶映射器沒有被調用。我已經嘗試請求路由與和out.RequiresAuthentication();仍然沒有用戶。
這是我第4步
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 = "[email protected].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函數的調用。
任何幫助將是偉大的。
註銷處理程序的好處。我沒有返回anon類型的麻煩,我在前端將它作爲一個對象返回。這個問題的關鍵是你必須做重定向,你不能調用登錄並返回自己的數據。 – Cogslave