WebAPIとAngular5トークン認証-ログイン後にユーザー情報を取得します

Tky17

Angularアプリにアクセスすると、次のようになります。

access_token:"******************"
expires_in:59
refresh_token:"******************"
token_type:"bearer"

でも今はログインしたユーザーの情報を使いたいのですが、トークン情報の間にユーザーIDがないので使えないのが問題です。

これはAPIからの私のc#ログインです:

//Varifying user credentials
    public bool Login(string userName, string password)
    {
        try
        {
            ServiceContext db = new ServiceContext();
            var userInfo = db.Users.Where(x => x.Username == userName).FirstOrDefault();
            if (userInfo != null)
            {
                string stringPwd = Encoding.ASCII.GetString(userInfo.Password);
                return stringPwd == password;
            }
            else
            {
                return false;
            }
        }
        catch (Exception ex)
        {
            return false;
        }
    }

これはAngularアプリからの私の認証サービスです:

@Injectable()
export class AuthenticationService {
constructor(private http: HttpClient) { }

login(username: string, password: string) {

    var data = "grant_type=password" + "&username=" + username + "&password=" + password;
    var reqHeader = new HttpHeaders({ 'Content-Type': 'application/x-www-urlencoded','No-Auth':'True' });
    return this.http.post<any>(`${environment.apiUrl}/token`, data, { headers: reqHeader })
        .pipe(map(user => {
            // login successful if there's a jwt token in the response
            if (user && user.access_token) {
                // store user details and jwt token in local storage to keep user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify(user));
            }
            return user;
        }));
}

これは私のGrantResourceOwnerCredentialsです:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        Accounts acc = new Accounts();

        //Authenticate the user credentials
        if (acc.Login(context.UserName, context.Password))
        {
            identity.AddClaim(new Claim(ClaimTypes.Role, acc.GetUserRole(context.UserName)));
            identity.AddClaim(new Claim("username", context.UserName));
            identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
            context.Validated(identity);
        }
        else
        {
            context.SetError("invalid_grant", "Provided username and password is incorrect");
            return;
        }
    }

ログインに使用したユーザー名を表示したいのですが。誰かが私を助けてアドバイスをくれますか?

前もって感謝します

えーしょ

GrantResourceOwnerCredentials以下のようにメソッドを変更します

AuthenticationPropertiesトークンデータでさらにパラメータを追加できることを使用する必要があります。

そしてAuthenticationTicket、追加したパラメーターをトークンデータにバインドし、Angularアプリでそれらのデータにアクセスします。

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{

    var identity = new ClaimsIdentity(context.Options.AuthenticationType);
    Accounts acc = new Accounts();

    //Authenticate the user credentials
    if (acc.Login(context.UserName, context.Password))
    {   
        //If you want to display user's firstname, lastname, or picture then
        //The below method is for getting user from database by its username
        var user = acc.GetUserByUsername(context.UserName);
        string firstName = user.FirstName;
        string lastName = user.LastName;

        identity.AddClaim(new Claim(ClaimTypes.Role, acc.GetUserRole(context.UserName)));
        identity.AddClaim(new Claim("username", context.UserName));
        identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));

        var props = new AuthenticationProperties(new Dictionary<string, string>
                    {                             
                         {
                             "userName", context.UserName
                         },
                         {
                             "firstName", firstName
                         },
                         {
                             "lastName", lastName
                         }
                    });

        var ticket = new AuthenticationTicket(identity, props);
        context.Validated(ticket);
    }
    else
    {
        context.SetError("invalid_grant", "Provided username and password is incorrect");
        return;
    }
}

そして、このメソッドを以下に追加します GrantResourceOwnerCredentials

public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
    {
        context.AdditionalResponseParameters.Add(property.Key, property.Value);
    }

    return Task.FromResult<object>(null);
}

出力:

access_token:"******************"
expires_in:59
refresh_token:"******************"
token_type:"bearer",
firstName: "Abc",
lastName: "Pqr",
userName: "Xyz"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ログイン後のAndroidFacebookはユーザー情報を取得します

分類Dev

ログイン後にユーザー情報を表示する

分類Dev

Requestsモジュールを使用してInstagramにログインし、ログイン後にユーザー情報を取得しています

分類Dev

WSO2 Identity Serverに正常にログインした後、ユーザー情報を取得できません

分類Dev

Facebook sdk共有設定でログインし、ユーザーに関する情報を取得します

分類Dev

現在ログインしているユーザーを確認し、/ etc / passwdから情報を取得します

分類Dev

Android-ログイン後にFirebaseからユーザー情報を取得する方法

分類Dev

ログイン後にユーザー情報を取得して、プロフィール セクションに表示する

分類Dev

RxJavaログインしてユーザー情報を取得する

分類Dev

Firebaseへのログイン中にユーザー情報を取得する方法

分類Dev

ログイン後、たとえばj_security_checkからサーブレットユーザーの資格情報(パスワード)を取得します。

分類Dev

ユーザーログイン後にReactにユーザー情報を保存する方法

分類Dev

ssh接続を監視し、authorized_keysからログインユーザー情報を取得します

分類Dev

ログインしたユーザー情報を保持する

分類Dev

ログインしたユーザー情報を表示する

分類Dev

ログイン検証は、ユーザーが間違ったログイン情報を入力した場合にアラートを表示します

分類Dev

ログイン後のユーザー情報を一箇所に保管し、複数のWEB APIコントローラーにアクセスする方法

分類Dev

GitHub Java APIを使用して、ログインしているユーザーに関する情報を取得しますか?

分類Dev

ユーザーログインサービスを処理してユーザー情報とログアウト状態を取得する方法

分類Dev

ドメインユーザーは、ログインするたびに資格情報を再認証するように求めました

分類Dev

PaypalJavascriptログインボタンを介してユーザー情報を取得する

分類Dev

ユーザーのGoogleログイン認証情報がCloud Firestoreにすでに存在するかどうかを確認します

分類Dev

すべてのユーザーアカウントと最後にログインした情報を一覧表示するコマンド?

分類Dev

play-authenticate-ログインしたユーザーのscalaビューまたはコントローラーに関するユーザー情報を取得します

分類Dev

auth0-jsを使用して追加情報を渡す方法(ログイン後にユーザーをリダイレクトするため)

分類Dev

auth0-jsを使用して追加情報を渡す方法(ログイン後にユーザーをリダイレクトするため)

分類Dev

JavaFXのデスクトップアプリケーションにログインした後、ユーザー情報を保持する方法

分類Dev

ログインしているユーザー情報を取得して表示する

分類Dev

ログインしたユーザー情報をmysqlデータベースから取得しようとしています

Related 関連記事

  1. 1

    ログイン後のAndroidFacebookはユーザー情報を取得します

  2. 2

    ログイン後にユーザー情報を表示する

  3. 3

    Requestsモジュールを使用してInstagramにログインし、ログイン後にユーザー情報を取得しています

  4. 4

    WSO2 Identity Serverに正常にログインした後、ユーザー情報を取得できません

  5. 5

    Facebook sdk共有設定でログインし、ユーザーに関する情報を取得します

  6. 6

    現在ログインしているユーザーを確認し、/ etc / passwdから情報を取得します

  7. 7

    Android-ログイン後にFirebaseからユーザー情報を取得する方法

  8. 8

    ログイン後にユーザー情報を取得して、プロフィール セクションに表示する

  9. 9

    RxJavaログインしてユーザー情報を取得する

  10. 10

    Firebaseへのログイン中にユーザー情報を取得する方法

  11. 11

    ログイン後、たとえばj_security_checkからサーブレットユーザーの資格情報(パスワード)を取得します。

  12. 12

    ユーザーログイン後にReactにユーザー情報を保存する方法

  13. 13

    ssh接続を監視し、authorized_keysからログインユーザー情報を取得します

  14. 14

    ログインしたユーザー情報を保持する

  15. 15

    ログインしたユーザー情報を表示する

  16. 16

    ログイン検証は、ユーザーが間違ったログイン情報を入力した場合にアラートを表示します

  17. 17

    ログイン後のユーザー情報を一箇所に保管し、複数のWEB APIコントローラーにアクセスする方法

  18. 18

    GitHub Java APIを使用して、ログインしているユーザーに関する情報を取得しますか?

  19. 19

    ユーザーログインサービスを処理してユーザー情報とログアウト状態を取得する方法

  20. 20

    ドメインユーザーは、ログインするたびに資格情報を再認証するように求めました

  21. 21

    PaypalJavascriptログインボタンを介してユーザー情報を取得する

  22. 22

    ユーザーのGoogleログイン認証情報がCloud Firestoreにすでに存在するかどうかを確認します

  23. 23

    すべてのユーザーアカウントと最後にログインした情報を一覧表示するコマンド?

  24. 24

    play-authenticate-ログインしたユーザーのscalaビューまたはコントローラーに関するユーザー情報を取得します

  25. 25

    auth0-jsを使用して追加情報を渡す方法(ログイン後にユーザーをリダイレクトするため)

  26. 26

    auth0-jsを使用して追加情報を渡す方法(ログイン後にユーザーをリダイレクトするため)

  27. 27

    JavaFXのデスクトップアプリケーションにログインした後、ユーザー情報を保持する方法

  28. 28

    ログインしているユーザー情報を取得して表示する

  29. 29

    ログインしたユーザー情報をmysqlデータベースから取得しようとしています

ホットタグ

アーカイブ