2

OAuth 登録/ログインを ASP.NET MVC 4 サイトに統合しようとしています。ただし、ログイン後にユーザーの ID やユーザー名を取得するのに問題があります。ログインのために、私は持っています:

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

if(result.IsSuccessful)
{
    if(OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
    {
        string username = User.Identity.Name;
        int userID = WebSecurity.CurrentUserId;
    }
}

OAuthWebSecurity.Login は成功しますが (true を返します)、username は空の文字列に設定され、userID は -1 に設定されます (つまり、誰もログインしていません)。ログイン関数がtrueを返す間のこの不一致を説明できる人はいますが、現在のユーザーを決定するこれら2つの方法はそうではありませんか? または、OAuth ログイン後に UserId (UserProfile テーブルに対応する) を見つける方法を教えてください。

このログイン構造の大部分は、MVC 4 インターネット アプリケーションの起動時に指定されるデフォルトのメンバーシップ コードからのものです。

4

1 に答える 1

5

使用している識別プロバイダーに依存すると思います。ユーザー名プロパティと ID プロバイダーが送信する特定のキーは、次のように取得できます。

AuthenticationResult result = OAuthWebSecurity.VerifyAuthentication(Url.Action("ExternalLoginCallback", new { ReturnUrl = returnUrl }));

string username = result.UserName;
string name = result.ExtraData["name"];

ID プロバイダーがデータベースに送り返すデータ (電話番号、名前など) を保存する必要があり、そこに UserID が生成されます。詳細情報 (および最初のセットアップ ガイド) は、次の場所にあります。

于 2013-06-18T04:21:48.027 に答える