如何在Firebase Twitter登录后于PHP端验证IdToken并获取用户信息
安卓端接入Firebase Twitter登录后PHP后端获取用户信息实现
我想要通过Firebase API实现Twitter登录功能,我的客户端是安卓应用,已完成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) { // 用户已登录 // 身份提供商数据可从以下路径获取: // authResult.getAdditionalUserInfo().getProfile() // OAuth访问令牌获取方式: // authResult.getCredential().getAccessToken() // OAuth密钥获取方式: // 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) { // 处理登录失败逻辑 Log.d("werte", "Sign in failed"); e.printStackTrace(); } });
我在PHP端仅找到了IdToken的验证方法,还需要额外获取登录用户的相关信息,原有验证逻辑如下:
$verifier = IdTokenVerifier::createWithProjectId('myProjectId'); try { $token = $verifier->verifyIdToken($idToken); echo($token); } catch (IdTokenVerificationFailed $e) { echo $e->getMessage(); // 示例输出: // The value 'eyJhb...' is not a verified ID token: // - The token is expired. }
解决方案
我在Frank的帮助下解决了该问题,采用了略有不同的实现方式:
$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对象中可以找到所有需要的用户资料信息。
内容的提问来源于stack exchange,提问作者JO Developer
相关产品推荐
相关产品推荐

