0

我已经为使用 FubuMVC 的 Web 应用程序实现了CurrentUserPropertyBinder(见下文)。

public class CurrentUserPropertyBinder : IPropertyBinder
    {
        private readonly Database _database;
        private readonly ISecurityContext _security;
        public CurrentUserPropertyBinder(Database database, ISecurityContext security)
        {
            _database = database;
            _security = security;
        }
        public bool Matches(PropertyInfo property)
        {
            return property.PropertyType == typeof(User)
                && property.Name == "CurrentUser";
        }
        public void Bind(PropertyInfo property, IBindingContext context)
        {
            var currentUser = //check database passing the username to get further user details using _security.CurrentIdentity.Name
            property.SetValue(context.Object, currentUser, null);
        }
    }

当我登录到我的网站时,这工作正常。CurrentUserPropertyBinder包含执行任务所需的所有信息(即_security.CurrentIdentity.Name中包含正确的用户详细信息)

当我尝试使用打开标准 fileDialog 的fineUploader(http://fineuploader.com/)导入文件时,_security.CurrentIdentity.Name为空。

它似乎不记得用户是谁,我不知道为什么。它适用于我的所有其他路线,但是我导入了一个文件,它不会记住用户。

请帮忙!提前致谢

注意:我们使用 FubuMVC.Authentication 来验证用户

4

1 回答 1

2

我猜你的行为被排除在身份验证之外;也许它是一个仅限 AJAX 的端点/动作。如果您在过去 3 个月左右更新了 FubuMVC.Authentication,我认为您可以在没有看到该操作是什么样子的情况下解决这个问题的简单修复。

您需要为此操作启用直通身份验证。开箱即用,FubuMVC.Auth 只为需要身份验证的操作连接 IPrincipal。如果您想从其他操作访问该信息,则必须启用传递过滤器。这里有一些快速的方法来做到这一点。

  1. 使用 [PassThroughAuthentication] 属性装饰您的端点/控制器类、此特定操作方法或此操作的输入模型,以选择加入直通身份验证。

    [PassThroughAuthentication]
    public AjaxContinuation post_upload_file(UploadInputModel input) { ... }
    

    或者

    [PassThroughAuthentication]
    public class UploadInputModel { ... }
    
  2. 在引导期间更改 AuthenticationSettings 以匹配 FubuRegistry 中的传递操作调用。

    ...
    AlterSettings<AuthenticationSettings>(x => {
        // Persistent cookie lasts 3 days ("remember me").
        x.ExpireInMinutes = 4320;
    
        // Many ways to filter here.
        x.PassThroughChains.InputTypeIs<UploadInputModel>();
    });
    

检查 /_fubu/endpoints 以确保带有您的操作调用的链应用了传递或身份验证过滤器。

于 2013-09-27T15:01:42.190 回答