2

私はカスタム フォーム認証メンバーシップ プロバイダーとロール マネージャーを使用する WSS 3.0 サイト (MOSS なし) を持っており、リモート Web サービスに対してユーザーを認証します (ただし、現時点では moq データに対して機能します)。私の問題は次のとおりです。ログインしたユーザーの名前は、フルネームではなく、ログイン名として表示されます。

ユーザー名とフルネームの両方が保存されるようにプロバイダーを設定し、要求されたとき (GetUserByUsername など) にいずれかの値がフルネームをユーザー名として持つ MembershipUser オブジェクトを返すようにします。これにより、sharepoint のユーザー ピッカーでユーザーのユーザー名を入力すると、標準の Windows 認証と同様に、オート コンプリートによってユーザー名がフルネームに変換されます。

ただし、プロバイダーのブレークポイントを設定すると、サイトにログインするときにプロバイダーの ValidateUser メソッドのみが呼び出され、それらは改ざんされた MembershipUser オブジェクトの要求ではありません。コンテンツ データベースの UserInfo テーブルを見ると、ユーザー名 (tp_title) がログイン名に設定された新しいエントリが作成されています。

データベースに対して直接クエリを実行することはできませんが (実行するつもりはありません)、カスタム FBA ユーザー向けの使いやすいユーザー名をどのように設定すればよいかわかりません。助けていただければ幸いです。

4

2 に答える 2

2

気にしないで、それを回避する方法を見つけました。カスタム メンバーシップ プロバイダーのユーザー検証メソッドで、次のコードを使用して name プロパティを設定できます。数千のユーザーを使用する場合、これは拡張できない可能性がありますが、小規模なユーザー ベースの場合は問題ありません。

public override bool ValidateUser(string username, string password)
    {
        if (moqUsers.Any(user => user.Username.Equals(username) && user.Password.Equals(password)))
        {
            SPContext.Current.Site.RootWeb.AllowUnsafeUpdates = true;
            var user = SPContext.Current.Site.RootWeb.EnsureUser(username);
            user.Name = RetrieveUserFullName(username);
            user.Update();
            SPContext.Current.Site.RootWeb.AllowUnsafeUpdates = false;
            return true;
        }
        return false;
    }

また、上記で rootweb を適切に処分する必要があるかもしれません。

于 2009-12-14T04:18:55.827 に答える
0

上記のコードを動作させるために多くのことを試みましたがValidateUser、これは更新するのに最適な時期だと思いますUserInfo.tp_Title(ユーザーがログインするたびに更新するという事実を除いて、ねえ、あなたは何をしているのですか?する?)。

しかし、エラーをスローせずに機能することはできませんでしたEnsureUser(これも試しました)。とすべてAllUsers[]の下で匿名のデリゲート内で実行しようとしました。SPSecurity.RunWithElevatedPrivilegesサイコロはありません。

ただし、これは完全に正しい考えだと思います。私がそれを機能させる方法は、SP UserGroupWebサービス(/_vti_bin/usergroup.asmx)を呼び出して、を呼び出すことであるということを共有したいと思いUpdateUserInfoます。私にとっての正確なメソッドシグネチャは次のようになります。

UserGroup.UpdateUserInfo("custommembershipprovidername:" + username, TheFullName,
 emailAddress, string.Empty)
于 2009-12-23T18:49:52.790 に答える