使用 Laravel\Socialite 优化第三方登录
优化callback 优化 Social ui 交互 优化第三方登录 优化第三方登录 优化第三方登录
This commit is contained in:
parent
85cfe3ecf5
commit
83b468907b
|
|
@ -16,8 +16,8 @@
|
||||||
"intervention/image": "^2.7",
|
"intervention/image": "^2.7",
|
||||||
"jenssegers/agent": "^2.6",
|
"jenssegers/agent": "^2.6",
|
||||||
"laravel/framework": "^9.0",
|
"laravel/framework": "^9.0",
|
||||||
|
"laravel/socialite": "^5.5",
|
||||||
"laravel/tinker": "^2.7",
|
"laravel/tinker": "^2.7",
|
||||||
"overtrue/socialite": "^4.5",
|
|
||||||
"spatie/laravel-permission": "^5.5",
|
"spatie/laravel-permission": "^5.5",
|
||||||
"srmklive/paypal": "^3.0",
|
"srmklive/paypal": "^3.0",
|
||||||
"stripe/stripe-php": "^8.8",
|
"stripe/stripe-php": "^8.8",
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "793040fbe53dc3a99b2c8ea50fcc03cb",
|
"content-hash": "fe94571e42db40b45b0d01fd70096a5f",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "asm89/stack-cors",
|
"name": "asm89/stack-cors",
|
||||||
|
|
@ -1970,6 +1970,81 @@
|
||||||
},
|
},
|
||||||
"time": "2022-09-08T13:45:54+00:00"
|
"time": "2022-09-08T13:45:54+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "laravel/socialite",
|
||||||
|
"version": "v5.5.6",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/laravel/socialite.git",
|
||||||
|
"reference": "1cd1682b709b8808a5b5dbb68179a58d1342aa7b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/laravel/socialite/zipball/1cd1682b709b8808a5b5dbb68179a58d1342aa7b",
|
||||||
|
"reference": "1cd1682b709b8808a5b5dbb68179a58d1342aa7b",
|
||||||
|
"shasum": "",
|
||||||
|
"mirrors": [
|
||||||
|
{
|
||||||
|
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||||
|
"preferred": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||||
|
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
|
||||||
|
"illuminate/http": "^6.0|^7.0|^8.0|^9.0",
|
||||||
|
"illuminate/support": "^6.0|^7.0|^8.0|^9.0",
|
||||||
|
"league/oauth1-client": "^1.10.1",
|
||||||
|
"php": "^7.2|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"mockery/mockery": "^1.0",
|
||||||
|
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
|
||||||
|
"phpunit/phpunit": "^8.0|^9.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "5.x-dev"
|
||||||
|
},
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Laravel\\Socialite\\SocialiteServiceProvider"
|
||||||
|
],
|
||||||
|
"aliases": {
|
||||||
|
"Socialite": "Laravel\\Socialite\\Facades\\Socialite"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Laravel\\Socialite\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Taylor Otwell",
|
||||||
|
"email": "taylor@laravel.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.",
|
||||||
|
"homepage": "https://laravel.com",
|
||||||
|
"keywords": [
|
||||||
|
"laravel",
|
||||||
|
"oauth"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/laravel/socialite/issues",
|
||||||
|
"source": "https://github.com/laravel/socialite"
|
||||||
|
},
|
||||||
|
"time": "2022-11-08T15:07:05+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel/tinker",
|
"name": "laravel/tinker",
|
||||||
"version": "v2.7.2",
|
"version": "v2.7.2",
|
||||||
|
|
@ -2403,6 +2478,88 @@
|
||||||
],
|
],
|
||||||
"time": "2022-04-17T13:12:02+00:00"
|
"time": "2022-04-17T13:12:02+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "league/oauth1-client",
|
||||||
|
"version": "v1.10.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/thephpleague/oauth1-client.git",
|
||||||
|
"reference": "d6365b901b5c287dd41f143033315e2f777e1167"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167",
|
||||||
|
"reference": "d6365b901b5c287dd41f143033315e2f777e1167",
|
||||||
|
"shasum": "",
|
||||||
|
"mirrors": [
|
||||||
|
{
|
||||||
|
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
||||||
|
"preferred": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-openssl": "*",
|
||||||
|
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||||
|
"guzzlehttp/psr7": "^1.7|^2.0",
|
||||||
|
"php": ">=7.1||>=8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-simplexml": "*",
|
||||||
|
"friendsofphp/php-cs-fixer": "^2.17",
|
||||||
|
"mockery/mockery": "^1.3.3",
|
||||||
|
"phpstan/phpstan": "^0.12.42",
|
||||||
|
"phpunit/phpunit": "^7.5||9.5"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-simplexml": "For decoding XML-based responses."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0-dev",
|
||||||
|
"dev-develop": "2.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"League\\OAuth1\\Client\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Ben Corlett",
|
||||||
|
"email": "bencorlett@me.com",
|
||||||
|
"homepage": "http://www.webcomm.com.au",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "OAuth 1.0 Client Library",
|
||||||
|
"keywords": [
|
||||||
|
"Authentication",
|
||||||
|
"SSO",
|
||||||
|
"authorization",
|
||||||
|
"bitbucket",
|
||||||
|
"identity",
|
||||||
|
"idp",
|
||||||
|
"oauth",
|
||||||
|
"oauth1",
|
||||||
|
"single sign on",
|
||||||
|
"trello",
|
||||||
|
"tumblr",
|
||||||
|
"twitter"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/thephpleague/oauth1-client/issues",
|
||||||
|
"source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1"
|
||||||
|
},
|
||||||
|
"time": "2022-04-15T14:02:14+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "mobiledetect/mobiledetectlib",
|
"name": "mobiledetect/mobiledetectlib",
|
||||||
"version": "2.8.39",
|
"version": "2.8.39",
|
||||||
|
|
@ -3065,80 +3222,6 @@
|
||||||
},
|
},
|
||||||
"time": "2022-01-27T09:35:39+00:00"
|
"time": "2022-01-27T09:35:39+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "overtrue/socialite",
|
|
||||||
"version": "4.5.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/overtrue/socialite.git",
|
|
||||||
"reference": "7bbaabf4c29df3c71814f2cb3d2c2e8ab54515a1"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/overtrue/socialite/zipball/7bbaabf4c29df3c71814f2cb3d2c2e8ab54515a1",
|
|
||||||
"reference": "7bbaabf4c29df3c71814f2cb3d2c2e8ab54515a1",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-json": "*",
|
|
||||||
"ext-openssl": "*",
|
|
||||||
"guzzlehttp/guzzle": "^7.0",
|
|
||||||
"php": ">=8.0.2",
|
|
||||||
"symfony/http-foundation": "^6.0",
|
|
||||||
"symfony/psr-http-message-bridge": "^2.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"friendsofphp/php-cs-fixer": "^3.0",
|
|
||||||
"jetbrains/phpstorm-attributes": "^1.0",
|
|
||||||
"mockery/mockery": "^1.3",
|
|
||||||
"phpstan/phpstan": "^1.7",
|
|
||||||
"phpunit/phpunit": "^9.0"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Overtrue\\Socialite\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "overtrue",
|
|
||||||
"email": "anzhengchao@gmail.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "A collection of OAuth 2 packages.",
|
|
||||||
"keywords": [
|
|
||||||
"Feishu",
|
|
||||||
"login",
|
|
||||||
"oauth",
|
|
||||||
"qcloud",
|
|
||||||
"qq",
|
|
||||||
"social",
|
|
||||||
"wechat",
|
|
||||||
"weibo"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/overtrue/socialite/issues",
|
|
||||||
"source": "https://github.com/overtrue/socialite/tree/4.5.0"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://github.com/overtrue",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2022-07-08T14:28:06+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "phpoption/phpoption",
|
"name": "phpoption/phpoption",
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
|
|
@ -6003,100 +6086,6 @@
|
||||||
],
|
],
|
||||||
"time": "2022-06-27T17:10:44+00:00"
|
"time": "2022-06-27T17:10:44+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/psr-http-message-bridge",
|
|
||||||
"version": "v2.1.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/psr-http-message-bridge.git",
|
|
||||||
"reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
|
|
||||||
"reference": "22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34",
|
|
||||||
"shasum": "",
|
|
||||||
"mirrors": [
|
|
||||||
{
|
|
||||||
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
|
|
||||||
"preferred": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1",
|
|
||||||
"psr/http-message": "^1.0",
|
|
||||||
"symfony/http-foundation": "^4.4 || ^5.0 || ^6.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"nyholm/psr7": "^1.1",
|
|
||||||
"psr/log": "^1.1 || ^2 || ^3",
|
|
||||||
"symfony/browser-kit": "^4.4 || ^5.0 || ^6.0",
|
|
||||||
"symfony/config": "^4.4 || ^5.0 || ^6.0",
|
|
||||||
"symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0",
|
|
||||||
"symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0",
|
|
||||||
"symfony/http-kernel": "^4.4 || ^5.0 || ^6.0",
|
|
||||||
"symfony/phpunit-bridge": "^5.4@dev || ^6.0"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
|
|
||||||
},
|
|
||||||
"type": "symfony-bridge",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "2.1-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Bridge\\PsrHttpMessage\\": ""
|
|
||||||
},
|
|
||||||
"exclude-from-classmap": [
|
|
||||||
"/Tests/"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Fabien Potencier",
|
|
||||||
"email": "fabien@symfony.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "http://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PSR HTTP message bridge",
|
|
||||||
"homepage": "http://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"http",
|
|
||||||
"http-message",
|
|
||||||
"psr-17",
|
|
||||||
"psr-7"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/symfony/psr-http-message-bridge/issues",
|
|
||||||
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.2"
|
|
||||||
},
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2021-11-05T13:13:39+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "symfony/routing",
|
"name": "symfony/routing",
|
||||||
"version": "v6.0.11",
|
"version": "v6.0.11",
|
||||||
|
|
|
||||||
|
|
@ -13,31 +13,28 @@ namespace Plugin\Social\Controllers;
|
||||||
|
|
||||||
use Beike\Models\Customer;
|
use Beike\Models\Customer;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Overtrue\Socialite\Exceptions\Exception;
|
use Illuminate\Support\Facades\Config;
|
||||||
use Overtrue\Socialite\SocialiteManager;
|
use Laravel\Socialite\Facades\Socialite;
|
||||||
use Beike\Admin\Http\Controllers\Controller;
|
use Beike\Admin\Http\Controllers\Controller;
|
||||||
use Plugin\Social\Repositories\CustomerRepo;
|
use Plugin\Social\Repositories\CustomerRepo;
|
||||||
|
|
||||||
class ShopSocialController extends Controller
|
class ShopSocialController extends Controller
|
||||||
{
|
{
|
||||||
private SocialiteManager $socialite;
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$config = [];
|
|
||||||
$providerSettings = plugin_setting('social.setting');
|
$providerSettings = plugin_setting('social.setting');
|
||||||
foreach ($providerSettings as $providerSetting) {
|
foreach ($providerSettings as $providerSetting) {
|
||||||
$provider = $providerSetting['provider'];
|
$provider = $providerSetting['provider'];
|
||||||
if (empty($provider)) {
|
if (empty($provider)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$config[$provider] = [
|
$config = [
|
||||||
'client_id' => $providerSetting['key'],
|
'client_id' => $providerSetting['key'],
|
||||||
'client_secret' => $providerSetting['secret'],
|
'client_secret' => $providerSetting['secret'],
|
||||||
'redirect' => plugin_route('social.callback', $provider),
|
'redirect' => plugin_route('social.callback', $provider),
|
||||||
];
|
];
|
||||||
|
Config::set("services.{$provider}", $config);
|
||||||
}
|
}
|
||||||
$this->socialite = new SocialiteManager($config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -46,34 +43,26 @@ class ShopSocialController extends Controller
|
||||||
*/
|
*/
|
||||||
public function redirect($provider)
|
public function redirect($provider)
|
||||||
{
|
{
|
||||||
if (!defined(\Overtrue\Socialite\Contracts\ABNF_OPEN_ID)) {
|
try {
|
||||||
require_once app_path() . '/../vendor/overtrue/socialite/src/Contracts/FactoryInterface.php';
|
return Socialite::driver($provider)->redirect();
|
||||||
require_once app_path() . '/../vendor/overtrue/socialite/src/Contracts/ProviderInterface.php';
|
} catch (\Exception $e) {
|
||||||
require_once app_path() . '/../vendor/overtrue/socialite/src/Contracts/UserInterface.php';
|
die($e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
$url = $this->socialite->create($provider)->redirect();
|
|
||||||
return redirect($url);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $provider
|
* @param $provider
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public function callback($provider)
|
public function callback($provider)
|
||||||
{
|
{
|
||||||
$code = request('code');
|
try {
|
||||||
$driver = $this->socialite->create($provider);
|
$userData = Socialite::driver($provider)->user();
|
||||||
|
$customer = CustomerRepo::createCustomer($provider, $userData);
|
||||||
// For google, facebook, twitter in China.
|
Auth::guard(Customer::AUTH_GUARD)->login($customer);
|
||||||
$driver->setGuzzleOptions([
|
return view('Social::shop/callback');
|
||||||
// 'proxy' => '127.0.0.1:7890'
|
} catch (\Exception $e) {
|
||||||
]);
|
die($e->getMessage());
|
||||||
|
}
|
||||||
$userData = $driver->userFromCode($code);
|
|
||||||
$customer = CustomerRepo::createCustomer($provider, $userData);
|
|
||||||
Auth::guard(Customer::AUTH_GUARD)->login($customer);
|
|
||||||
return view('Social::shop/callback');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ return [
|
||||||
'qq' => 'QQ',
|
'qq' => 'QQ',
|
||||||
'taobao' => 'Taobao',
|
'taobao' => 'Taobao',
|
||||||
'tapd' => 'Tapd',
|
'tapd' => 'Tapd',
|
||||||
|
'twitter' => 'Twitter',
|
||||||
'wechat' => 'Wechat',
|
'wechat' => 'Wechat',
|
||||||
'wework' => 'Wework',
|
'wework' => 'Wework',
|
||||||
'weibo' => 'Weibo',
|
'weibo' => 'Weibo',
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ return [
|
||||||
'text_module' => 'Modules',
|
'text_module' => 'Modules',
|
||||||
'text_success' => 'Success: You have modified module OpenCart OmniAuth!',
|
'text_success' => 'Success: You have modified module OpenCart OmniAuth!',
|
||||||
'text_copyright' => 'OpenCart.cn <a href="http://www.opencart.cn" target="_blank">OmniAuth</a> © %s',
|
'text_copyright' => 'OpenCart.cn <a href="http://www.opencart.cn" target="_blank">OmniAuth</a> © %s',
|
||||||
'text_omni_explain' => 'This plugin supports WeChat scan code, WeChat Official, QQ, Weibo, Facebook, Google, Twitter and others Social Network',
|
'text_omni_explain' => 'This plugin supports Facebook, Twitter, Google etc.',
|
||||||
'text_omni_explain_2' => 'To use a third-party login, you need to apply to the corresponding platform, and fill in the obtained ID and key to the corresponding input box.',
|
'text_omni_explain_2' => 'To use a third-party login, you need to apply to the corresponding platform, and fill in the obtained ID and key to the corresponding input box.',
|
||||||
'text_wechat_title' => 'WeChat scan code login application address',
|
'text_wechat_title' => 'WeChat scan code login application address',
|
||||||
'text_wechat_info' => 'WeChat open platform',
|
'text_wechat_info' => 'WeChat open platform',
|
||||||
|
|
@ -24,7 +24,7 @@ return [
|
||||||
'text_weibo_info' => 'Weibo open platform',
|
'text_weibo_info' => 'Weibo open platform',
|
||||||
'text_facebook_title' => 'Facebook login application address',
|
'text_facebook_title' => 'Facebook login application address',
|
||||||
'text_google_title' => 'Google login application address',
|
'text_google_title' => 'Google login application address',
|
||||||
'text_Twitter_title' => 'Twitter login application address',
|
'text_twitter_title' => 'Twitter login application address',
|
||||||
'text_help_msg' => 'help information',
|
'text_help_msg' => 'help information',
|
||||||
|
|
||||||
// Entry
|
// Entry
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ return [
|
||||||
'qcloud' => '腾讯云',
|
'qcloud' => '腾讯云',
|
||||||
'qq' => 'QQ',
|
'qq' => 'QQ',
|
||||||
'taobao' => '淘宝',
|
'taobao' => '淘宝',
|
||||||
'tapd' => 'tapd',
|
'tapd' => 'Tapd',
|
||||||
|
'twitter' => 'Twitter',
|
||||||
'wechat' => '微信',
|
'wechat' => '微信',
|
||||||
'wework' => '企业微信',
|
'wework' => '企业微信',
|
||||||
'weibo' => '微博',
|
'weibo' => '微博',
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ return [
|
||||||
'text_module' => '模块',
|
'text_module' => '模块',
|
||||||
'text_success' => '成功: 您成功修改第三方登录配置!',
|
'text_success' => '成功: 您成功修改第三方登录配置!',
|
||||||
'text_copyright' => 'OpenCart.cn <a href="http://www.opencart.cn" target="_blank">获取帮助</a> © %s',
|
'text_copyright' => 'OpenCart.cn <a href="http://www.opencart.cn" target="_blank">获取帮助</a> © %s',
|
||||||
'text_omni_explain' => '本模块支持微信扫码, 微信公众号, QQ, 微博,Facebook,Google,Twitter等第三方登录',
|
'text_omni_explain' => '本模块支持微Facebook, Twitter, Google等第三方登录',
|
||||||
'text_omni_explain_2' => '要使用第三方登录, 需要到对应平台申请开通, 并把获取到的 ID 和密钥填写到上面对应的输入框',
|
'text_omni_explain_2' => '要使用第三方登录, 需要到对应平台申请开通, 并把获取到的 ID 和密钥填写到上面对应的输入框',
|
||||||
'text_wechat_title' => '微信扫码登录申请地址',
|
'text_wechat_title' => '微信扫码登录申请地址',
|
||||||
'text_wechat_info' => '微信开放平台',
|
'text_wechat_info' => '微信开放平台',
|
||||||
|
|
@ -24,7 +24,7 @@ return [
|
||||||
'text_weibo_info' => '微博开放平台',
|
'text_weibo_info' => '微博开放平台',
|
||||||
'text_facebook_title' => 'Facebook登录申请地址',
|
'text_facebook_title' => 'Facebook登录申请地址',
|
||||||
'text_google_title' => 'Google登录申请地址',
|
'text_google_title' => 'Google登录申请地址',
|
||||||
'text_Twitter_title' => 'Twitter登录申请地址',
|
'text_twitter_title' => 'Twitter登录申请地址',
|
||||||
'text_help_msg' => '帮助信息',
|
'text_help_msg' => '帮助信息',
|
||||||
|
|
||||||
// Entry
|
// Entry
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@
|
||||||
namespace Plugin\Social\Repositories;
|
namespace Plugin\Social\Repositories;
|
||||||
|
|
||||||
use Beike\Models\Customer;
|
use Beike\Models\Customer;
|
||||||
use Overtrue\Socialite\User;
|
use Laravel\Socialite\Two\User;
|
||||||
use Overtrue\Socialite\Providers;
|
|
||||||
use Beike\Shop\Services\AccountService;
|
use Beike\Shop\Services\AccountService;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Plugin\Social\Models\CustomerSocial;
|
use Plugin\Social\Models\CustomerSocial;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Overtrue\Socialite\Exceptions\Exception;
|
|
||||||
|
|
||||||
class CustomerRepo
|
class CustomerRepo
|
||||||
{
|
{
|
||||||
|
|
@ -26,28 +24,9 @@ class CustomerRepo
|
||||||
* 允许的第三方服务
|
* 允许的第三方服务
|
||||||
*/
|
*/
|
||||||
private const PROVIDERS = [
|
private const PROVIDERS = [
|
||||||
Providers\Alipay::NAME,
|
'facebook',
|
||||||
Providers\Azure::NAME,
|
'twitter',
|
||||||
Providers\DingTalk::NAME,
|
'google',
|
||||||
Providers\DouYin::NAME,
|
|
||||||
Providers\Douban::NAME,
|
|
||||||
Providers\Facebook::NAME,
|
|
||||||
Providers\FeiShu::NAME,
|
|
||||||
// Providers\Figma::NAME,
|
|
||||||
// Providers\GitHub::NAME,
|
|
||||||
// Providers\Gitee::NAME,
|
|
||||||
Providers\Google::NAME,
|
|
||||||
Providers\Line::NAME,
|
|
||||||
Providers\Linkedin::NAME,
|
|
||||||
// Providers\OpenWeWork::NAME,
|
|
||||||
Providers\Outlook::NAME,
|
|
||||||
// Providers\QCloud::NAME,
|
|
||||||
Providers\QQ::NAME,
|
|
||||||
// Providers\Taobao::NAME,
|
|
||||||
// Providers\Tapd::NAME,
|
|
||||||
Providers\WeChat::NAME,
|
|
||||||
// Providers\WeWork::NAME,
|
|
||||||
Providers\Weibo::NAME,
|
|
||||||
];
|
];
|
||||||
|
|
||||||
public static function allProviders(): array
|
public static function allProviders(): array
|
||||||
|
|
@ -68,7 +47,6 @@ class CustomerRepo
|
||||||
* @param $provider
|
* @param $provider
|
||||||
* @param User $userData
|
* @param User $userData
|
||||||
* @return Customer
|
* @return Customer
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public static function createCustomer($provider, User $userData): Customer
|
public static function createCustomer($provider, User $userData): Customer
|
||||||
{
|
{
|
||||||
|
|
@ -84,7 +62,7 @@ class CustomerRepo
|
||||||
$customerData = [
|
$customerData = [
|
||||||
'from' => $provider,
|
'from' => $provider,
|
||||||
'email' => $userData->getEmail(),
|
'email' => $userData->getEmail(),
|
||||||
'name' => $userData->getNickname(),
|
'name' => $userData->getName(),
|
||||||
'avatar' => $userData->getAvatar(),
|
'avatar' => $userData->getAvatar(),
|
||||||
];
|
];
|
||||||
$customer = AccountService::register($customerData);
|
$customer = AccountService::register($customerData);
|
||||||
|
|
@ -100,7 +78,6 @@ class CustomerRepo
|
||||||
* @param $provider
|
* @param $provider
|
||||||
* @param User $userData
|
* @param User $userData
|
||||||
* @return Model|Builder
|
* @return Model|Builder
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
public static function createSocial($customer, $provider, User $userData): Model|Builder
|
public static function createSocial($customer, $provider, User $userData): Model|Builder
|
||||||
{
|
{
|
||||||
|
|
@ -114,8 +91,8 @@ class CustomerRepo
|
||||||
'provider' => $provider,
|
'provider' => $provider,
|
||||||
'user_id' => $userData->getId(),
|
'user_id' => $userData->getId(),
|
||||||
'union_id' => '',
|
'union_id' => '',
|
||||||
'access_token' => $userData->getAccessToken(),
|
'access_token' => $userData->token,
|
||||||
'extra' => $userData->toJSON()
|
'extra' => json_encode($userData->getRaw())
|
||||||
];
|
];
|
||||||
return CustomerSocial::query()->create($socialData);
|
return CustomerSocial::query()->create($socialData);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,8 +72,8 @@
|
||||||
<td>
|
<td>
|
||||||
<el-form-item label="" class="mb-0">
|
<el-form-item label="" class="mb-0">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input size="small" class="form-control" :value="callbackUrl(item.callback)" disabled placeholder="{{ __('Social::setting.entry_callback') }}"></input>
|
<input size="small" class="form-control" :value="item.callback" disabled placeholder="{{ __('Social::setting.entry_callback') }}"></input>
|
||||||
<a href="javascript:void(0)" class="btn btn-outline-secondary opacity-75 copy-code" :data-clipboard-text="item.callback"><i class="bi bi-front"></i></a>
|
<a href="javascript:void(0)" class="btn btn-outline-secondary opacity-75 copy-code" :data-clipboard-text="item.callback" @click="copyCode"><i class="bi bi-front"></i></a>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</td>
|
</td>
|
||||||
|
|
@ -99,23 +99,14 @@
|
||||||
<ol class="list-group list-group-numbered lh-lg text-secondary">
|
<ol class="list-group list-group-numbered lh-lg text-secondary">
|
||||||
<li>{{ __('Social::setting.text_omni_explain') }}</li>
|
<li>{{ __('Social::setting.text_omni_explain') }}</li>
|
||||||
<li>{{ __('Social::setting.text_omni_explain_2') }}</li>
|
<li>{{ __('Social::setting.text_omni_explain_2') }}</li>
|
||||||
<li>{{ __('Social::setting.text_wechat_title') }}
|
|
||||||
<a target="_blank" href="https://open.weixin.qq.com/">{{ __('Social::setting.text_wechat_info') }}</a>
|
|
||||||
</li>
|
|
||||||
<li>{{ __('Social::setting.text_qq_title') }}
|
|
||||||
<a target="_blank" href="https://connect.qq.com/">{{ __('Social::setting.text_qq_info') }}</a>
|
|
||||||
</li>
|
|
||||||
<li>{{ __('Social::setting.text_weibo_title') }}
|
|
||||||
<a target="_blank" href="http://open.weibo.com/">{{ __('Social::setting.text_weibo_info') }}</a>
|
|
||||||
</li>
|
|
||||||
<li>{{ __('Social::setting.text_facebook_title') }}
|
<li>{{ __('Social::setting.text_facebook_title') }}
|
||||||
<a target="_blank" href="https://developers.facebook.com/">Facebook</a>
|
<a target="_blank" href="https://developers.facebook.com/">Facebook</a>
|
||||||
</li>
|
</li>
|
||||||
<li>{{ __('Social::setting.text_google_title') }}
|
<li>{{ __('Social::setting.text_twitter_title') }}
|
||||||
<a target="_blank" href="https://console.developers.google.com/projectcreate/">Google</a>
|
<a target="_blank" href="https://developer.twitter.com/">Twitter</a>
|
||||||
</li>
|
</li>
|
||||||
<li>{{ __('Social::setting.text_Twitter_title') }}
|
<li>{{ __('Social::setting.text_google_title') }}
|
||||||
<a target="_blank" href="https://apps.twitter.com/">Twitter</a>
|
<a target="_blank" href="https://console.developers.google.com/">Google</a>
|
||||||
</li>
|
</li>
|
||||||
.......
|
.......
|
||||||
</ol>
|
</ol>
|
||||||
|
|
@ -181,19 +172,19 @@
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
callbackUrl(code) {
|
|
||||||
return `{{ shop_route('home.index') }}/${code}`;
|
|
||||||
},
|
|
||||||
|
|
||||||
providerChange(e, index) {
|
providerChange(e, index) {
|
||||||
this.form.social[index].callback = 'plugin/social/callbacks/' + e
|
this.form.social[index].callback = `{{ shop_route('home.index') }}/plugin/social/callbacks/${e}`
|
||||||
},
|
},
|
||||||
|
|
||||||
addRow() {
|
addRow() {
|
||||||
let providers = this.source.providers.filter(e => !this.form.social.some(s => s.provider == e.code))
|
let providers = this.source.providers.filter(e => !this.form.social.some(s => s.provider == e.code))
|
||||||
if (providers.length) {
|
if (providers.length) {
|
||||||
this.form.social.push({provider: providers[0].code, status: 1, key: '', secret: '', callback: `plugin/social/callbacks/${this.source.providers[1].code}`, sort_order: this.form.social.length})
|
this.form.social.push({provider: providers[0].code, status: 1, key: '', secret: '', callback: `{{ shop_route('home.index') }}/plugin/social/callbacks/${this.source.providers[0].code}`, sort_order: this.form.social.length})
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
copyCode() {
|
||||||
|
layer.msg('Ok');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"code": "social",
|
"code": "social",
|
||||||
"name": "Social",
|
"name": "Social",
|
||||||
"description": "第三方登录(包括微信、QQ、微博、Google、Facebook)",
|
"description": "第三方登录(包括Facebook、Twitter、Google)",
|
||||||
"type": "social",
|
"type": "social",
|
||||||
"version": "v1.0.0",
|
"version": "v1.0.0",
|
||||||
"icon": "/image/logo.png",
|
"icon": "/image/logo.png",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue