Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save shaunthegeek/76ba56374e9442caa270c789d3178c83 to your computer and use it in GitHub Desktop.

Select an option

Save shaunthegeek/76ba56374e9442caa270c789d3178c83 to your computer and use it in GitHub Desktop.
Laravel socialite 微信登录使用 union id
diff -uNr vendor/socialiteproviders/weixin/Provider.php sinkcup/socialiteproviders/weixin/Provider.php
--- vendor/socialiteproviders/weixin/Provider.php 2017-11-18 13:09:07.000000000 +0800
+++ sinkcup/socialiteproviders/weixin/Provider.php 2019-01-04 18:53:29.548886728 +0800
@@ -100,7 +100,7 @@
protected function mapUserToObject(array $user)
{
return (new User())->setRaw($user)->map([
- 'id' => $user['openid'],
+ 'id' => $user['unionid'],
'nickname' => isset($user['nickname']) ? $user['nickname'] : null,
'avatar' => isset($user['headimgurl']) ? $user['headimgurl'] : null,
'name' => null,
diff -uNr vendor/socialiteproviders/weixin-web/Provider.php sinkcup/socialiteproviders/weixin-web/Provider.php
--- vendor/socialiteproviders/weixin-web/Provider.php 2018-02-12 14:58:19.000000000 +0800
+++ sinkcup/socialiteproviders/weixin-web/Provider.php 2019-01-04 18:56:17.885697393 +0800
@@ -99,7 +99,7 @@
protected function mapUserToObject(array $user)
{
return (new User())->setRaw($user)->map([
- 'id' => Arr::get($user, 'openid'), 'nickname' => $user['nickname'],
+ 'id' => Arr::get($user, 'unionid'), 'nickname' => $user['nickname'],
'avatar' => $user['headimgurl'], 'name' => null, 'email' => null,
]);
}
diff -uNr vendor/sinkcup/laravel-make-auth-socialite/src/Http/Controllers/SocialiteLoginController.php laravel-make-auth-socialite/src/Http/Controllers/SocialiteLoginController.php
--- vendor/sinkcup/laravel-make-auth-socialite/src/Http/Controllers/SocialiteLoginController.php 2019-01-17 20:49:27.385501906 +0800
+++ laravel-make-auth-socialite/src/Http/Controllers/SocialiteLoginController.php 2019-04-18 19:20:54.884507335 +0800
@@ -80,10 +80,25 @@
return $this->sendFailedSocialLoginResponse($provider);
}
+ // check wechat union id
+ if ($provider == 'weixinweb') {
+ $provider = 'wechat_web';
+ } elseif ($provider == 'weixin') {
+ $provider = 'wechat_service_account';
+ }
+ $wechat_providers = ['wechat_web', 'wechat_service_account'];
+ $user_id = null;
+ if (in_array($provider, $wechat_providers)) {
+ $user_id = SocialAccount::whereIn('provider', array_diff($wechat_providers, [$provider]))
+ ->where('provider_user_id', $remote_user->getId())
+ ->whereNotNull('user_id')
+ ->value('user_id');
+ }
+
$social_account = SocialAccount::firstOrNew([
'provider' => $provider,
'provider_user_id' => $remote_user->getId(),
- ]);
+ ], ['user_id' => $user_id]);
$name = $remote_user->getName() ?: $remote_user->getNickname();
if (!empty($social_account->user)) {
$user = $social_account->user;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment