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 に答える