Laravel 社交名流 Apple 登录 无用户信息

问题描述 投票:0回答:1

我在我的 Laravel API 中添加了我的登录端点功能,以便用户在我尝试时也可以使用 Apple 登录,配置中的所有内容在我的 api 中看起来也都很好我收到了:

    (
    [id] => 001519.7eab28c498c946828053eXXXXXXXX.XXXX
    [nickname] => 
    [name] => 
    [email] => 
    [avatar] => 
    [user] => Array
        (
            [iss] => https://appleid.apple.com
            [aud] => com.muze.mob
            [exp] => 1709642029
            [iat] => 1709555629
            [sub] => XXXXX.XXXXXXXXXXXXXXXXXXXX.XXXX
            [nonce] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            [c_hash] => XXXXXXXXXXXX
            [auth_time] => 1709555629
            [nonce_supported] => 1
        )

    [attributes] => Array
        (
            [id] => XXXXX.XXXXXXXXXXXXXXXXXXXXX.XXXX
            [name] => 
            [email] => 
        )

    [token] => eyJraWQiOiJCaDZIN3JIVm1iIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLm11emUubW9iIiwiZXhwIjoxNzA5NjQyMDI5LCJpYXQiOjE3MDk1NTU2MjksInN1YiI6IjAwMTUxOS43ZWFiMjhjNDk4Yzk0NjgyODA1M2VlYTIxYTM2ZmZjOC4xMTU5Iiwibm9uY2UiOiI1ZDVjMGRiMjE2NGU4MzZiM2YzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    [refreshToken] => 
    [expiresIn] => 
    [approvedScopes] => 
    [accessTokenResponseBody] => 
)

正如我们所看到的,身份验证看起来不错,也缺少用户电子邮件..我也有一个ID,但我不明白为什么我不能使用用户邮件..

我使用苹果提供商的社交名流的 userFromToken

$oauthUser = Socialite::driver($request->get('login_type'))->stateless()->userFromToken($request->get('token'));                
$username = $oauthUser->getName() && !User::where('username', $oauthUser->getName())->exists() && !User::where('pseudo', $oauthUser->getName())->exists() ? $oauthUser->getName() : $this->generateUniqueUsername();
                

                $user = User::firstOrCreate(
                    ['email' => $oauthUser->getEmail()],
                    [
                        'username' => str_replace(' ', '', $username),
                        'pseudo' => str_replace(' ', '', $username),
                        'first_name' => $oauthUser->user['given_name'] ?? null,
                        'last_name' => $oauthUser->user['family_name'] ?? null,
                        'avatar' => $oauthUser->getAvatar(),
                        'email_verified_at' => now(),
                        'password' => Hash::make(substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 30))
                    ]
                );

缺少什么?即使用户不想共享他的邮件,苹果也会生成一个。

如何解决这个问题?

谢谢

ios laravel eloquent laravel-socialite
1个回答
0
投票

初次注册时,仅回复用户信息是正常的。对于使用同一 Apple 帐户的后续连接,不会共享用户信息,并且仅在响应中返回用户标识符,如您的情况。建议安全地缓存包含用户信息(电子邮件、名字、姓氏)的初始响应,直到您确认已在服务器上成功创建帐户。

就我而言,要在初始连接期间接收信息,我必须访问 iPhone 的设置以删除链接到我的 Apple ID 的应用程序。如果您使用的是 iPhone,则可以访问“设置”,点击您的姓名,然后点击“登录和安全”,然后点击“使用 Apple 登录”。您将看到通过 Apple 登录使用的应用程序列表。然后就可以删除该应用了(有时可能需要坚持删除)。

以下是截图供参考: enter image description here

尝试再次登录,您应该会收到用户信息,因为这是至关重要的初始连接。

以下是不同的链接:

© www.soinside.com 2019 - 2024. All rights reserved.