繁体   English   中英

Php Firebase 验证用 Twitter 获取用户信息

[英]Php Firebase verification with Twitter get user information

我不想通过 Firebase API 实现 Twitter 登录。我的客户是一个 android 应用程序,它登录到 Twitter 帐户并将 IdToken 发送到我的 php 后端。 这很好用。

OAuthProvider.Builder provider = OAuthProvider.newBuilder("twitter.com");
provider.addCustomParameter("lang", "de");
FirebaseAuth.getInstance()
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
                new OnSuccessListener<AuthResult>() {
                    @Override
                    public void onSuccess(AuthResult authResult) {
                        // User is signed in.
                        // IdP data available in
                        // authResult.getAdditionalUserInfo().getProfile().
                        // The OAuth access token can also be retrieved:
                        // authResult.getCredential().getAccessToken().
                        // The OAuth secret can be retrieved by calling:
                        // authResult.getCredential().getSecret().
                        Log.d("werte", "User is signed in");
                        Log.d("werte", "Username: " + authResult.getAdditionalUserInfo().getUsername());
                        Log.d("werte", "Info: " + authResult.getAdditionalUserInfo().getProfile().toString());
                        authResult.getUser().getIdToken(true).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
                            @Override
                            public void onSuccess(GetTokenResult getTokenResult) {
                                Log.d("werte", "Accesstoken: " + getTokenResult.getToken());
                            }
                        });
                    }
                })
        .addOnFailureListener(
                new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Handle failure.
                        Log.d("werte", "Sign in failed");
                        e.printStackTrace();
                    }
                });

但是对于php我只找到了一个验证token的方法。 我还需要用户信息。 我怎么得到这个?

$verifier = IdTokenVerifier::createWithProjectId('myProjectId');
try {
    $token = $verifier->verifyIdToken($idToken);
    echo($token);
} catch (IdTokenVerificationFailed $e) {
    echo $e->getMessage();
    // Example Output:
    // The value 'eyJhb...' is not a verified ID token:
    // - The token is expired.
}

编辑:我在弗兰克的帮助下解决了它。 但我用了一点不同的方式。

$googleKeysURL = 'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com';
        $key = json_decode(file_get_contents($googleKeysURL), true);
        $decoded = JWT::decode($idToken, $key, array("RS256"));

$decoded Object 中,您可以找到所需的所有个人资料信息。 谢谢弗兰克

验证 ID 令牌只做如其名称所说的那样:它验证令牌是否使用有效密钥签名。

如果您想使用解码令牌中的声明,请使用 JWT 解码库,例如 Firebase 中的解码库: php-jwt 从文档中的示例,您应该能够通过以下方式获取解码的令牌:

$decoded = JWT::decode($jwt, $key, array('HS256'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM