wyyl/plugins/Social/Controllers/ShopSocialController.php

74 lines
2.0 KiB
PHP

<?php
/**
* SocialController.php
*
* @copyright 2022 beikeshop.com - All Rights Reserved
* @link https://beikeshop.com
* @author Edward Yang <yangjin@guangda.work>
* @created 2022-09-30 18:46:38
* @modified 2022-09-30 18:46:38
*/
namespace Plugin\Social\Controllers;
use Beike\Models\Customer;
use Illuminate\Support\Facades\Auth;
use Overtrue\Socialite\Exceptions\Exception;
use Overtrue\Socialite\SocialiteManager;
use Beike\Admin\Http\Controllers\Controller;
use Plugin\Social\Repositories\CustomerRepo;
class ShopSocialController extends Controller
{
private SocialiteManager $socialite;
public function __construct()
{
$config = [];
$providerSettings = plugin_setting('social.setting');
foreach ($providerSettings as $providerSetting) {
$provider = $providerSetting['provider'];
if (empty($provider)) {
continue;
}
$config[$provider] = [
'client_id' => $providerSetting['key'],
'client_secret' => $providerSetting['secret'],
'redirect' => plugin_route('social.callback', $provider),
];
}
$this->socialite = new SocialiteManager($config);
}
/**
* @param $provider
* @return mixed
*/
public function redirect($provider)
{
$url = $this->socialite->create($provider)->redirect();
return redirect($url);
}
/**
* @param $provider
* @return mixed
* @throws Exception
*/
public function callback($provider)
{
$code = request('code');
$driver = $this->socialite->create($provider);
// For google, facebook, twitter in China.
$driver->setGuzzleOptions([
'proxy' => '127.0.0.1:7890'
]);
$userData = $driver->userFromCode($code);
$customer = CustomerRepo::createCustomer($provider, $userData);
Auth::guard(Customer::AUTH_GUARD)->login($customer);
return view('Social::shop/callback');
}
}