從我在源代碼中看到的RequiresAuthentication()對整個模塊進行認證檢查。有沒有什麼辦法可以按照路線做到這一點?NancyFx每個路由的認證
3
A
回答
1
namespace Kallist.Modules {
#region Namespaces
using System;
using Nancy;
#endregion
public static class ModuleExtensions {
#region Methods
public static Response WithAuthentication(this NancyModule module, Func<Response> executeAuthenticated) {
if ((module.Context.CurrentUser != null) && !string.IsNullOrWhiteSpace(module.Context.CurrentUser.UserName)) {
return executeAuthenticated();
}
return new Response { StatusCode = HttpStatusCode.Unauthorized };
}
#endregion
}
}
5
我有同樣的問題。但事實證明,RequiresAuthentication
在模塊級和路由級都起作用。爲了演示,這裏有一些代碼撕掉了我當前的項目(並不是所有的路由都是爲了簡潔起見)。
public class RegisterModule : _BaseModule
{
public RegisterModule() : base("/register")
{
Get["/basic-details"] = _ => View["RegisterBasicDetailsView", Model];
Get["/select"] = _ =>
{
this.RequiresAuthentication();
return View["RegisterSelectView", Model];
};
}
}
當然有做這種方式唯一的問題是,所有的模塊中的保護路徑需要調用RequiresAuthentication
。在上述模塊的情況下,我還有另外5條路由(未顯示),所有這些路由都需要保護,因此在模塊級別上調用RequiresAuthentication
而不是一個。另一種方法是將未受保護的路由拉入另一個模塊,但我的判斷是模塊的擴散比額外的RequiresAuthentication調用更差。
1
我遇到了同樣的問題,這是我如何解決它。
var module = new MyModule();
module.AddBeforeHookOrExecute(context => null, "Requires Authentication");
_browser = new Browser(with =>
{
with.Module(module);
with.RequestStartup((container, pipelines, ctx) =>
{
ctx.CurrentUser = new User { UserId = "1234", UserName = "test"};
});
});
我現在可以在模塊級使用this.RequiresAuthentication()並運行我的單元測試。
相關問題
- 1. 路由在NancyFX
- 2. 每個模塊或每個路由序列化的NancyFx
- 3. 路線名稱由NancyFX
- 4. NancyFX路由 - 多個可變參數
- 5. AngularJs路由認證
- 6. NancyFX在異步路由處理器中執行每個路由驗證時發生錯誤
- 7. Ember客戶端認證,路由認證
- 8. Laravel 5.2 - 路由認證
- 9. Nancyfx路由返回所有參數
- 10. 爲認證,未認證和根路徑設計路由
- 11. NancyFX中的路由可以使用多個模塊組成嗎?
- 12. Symfony2的API認證和路由
- 13. Devise令牌認證的API路由
- 14. 基於角色的路由認證
- 15. Laravel認證的動態路由子域
- 16. 鐵路路由器的默認路由
- 17. Zend 2和認證配置路由
- 18. Laravel 5.3認證路由重定向到/
- 19. Angular 2兒童路由認證
- 20. Node.js module.exports passport已認證到路由
- 21. 定製路由器認證頁面
- 22. 每個路由的角度ui路由器多個視圖
- 23. NancyFx的動態路線
- 24. ASP.NET MVC中配置的默認認證路由在哪裏?
- 25. 每個Camel + Jetty路由使用不同的SSL證書
- 26. 多個Backbone.Routers和默認路由 - 匹配路由的順序/加載路由器
- 27. 如何總是爲每個請求默認路由
- 28. 卸下從驗證::路由的路由()
- 29. 在NancyFX的RequestStartup中檢查路由是否有效
- 30. 是否支持像ASP.NET MVC那樣的NancyFx反向路由?
我沒有嘗試從路由中調用RequiresAuthentication,因爲在查看源代碼後似乎沒有工作。我創建了一個新的擴展方法,對context.CurrentUser執行相同的檢查,但返回bool。 – Emilian
你可以爲你的擴展方法提供代碼嗎? – biofractal
我已經發布了下面的代碼,你可以像this.WithAuthentication(()=> {/ *需要認證用戶* /}的代碼)使用它; – Emilian