Laravel 中社交名流包中的动态社交应用程序凭证

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

我正在尝试构建一个多租户应用程序,我在其中配置了数据库、视图文件夹,我知道必须有某种方法来配置社交名流的社交应用程序登录凭据。好吧,我尝试了一些方法来动态设置它。

第1步

我在一个单独的文件夹中创建了一个名为社交名流名称的类,当调用社交登录时,我在控制器中实现以下内容:

public function redirectSocialLogin()
{
    $social = new SocialiteProvider();
    $fb = $social->makeFacebookDriver();
    return $fb->redirect();
}

在回调时我使用了以下内容:

public function callbackSocialLogin($media)
{
    $user = Socialite::driver($media)->user();
    $data['name'] = $user->getName();
    $data['email'] = $user->getEmail();
    dd($data);
}

在我的课堂上,我有以下代码:

public function makeFacebookDriver()
{
    $config['client_id'] = 'XXXXXXXXXXXXXXX';
    $config['client_secret'] = 'XXXXXXXXXXXXXXX';
    $config['redirect'] = 'http://XXXXXXXXXXXX/auth/facebook/callback';
    return  Socialite::buildProvider('\Laravel\Socialite\Two\FacebookProvider', $config);
}

它完美地重定向到社交页面,但在获取回调时我收到错误,它再次获取 services.php 文件进行配置,但没有得到任何信息。

第2步

我以

ServiceProvider
的名义做了一个
SocialiteServiceProvider
,并扩展了核心
SocialiteServiceProvider
,并放置了以下代码:

protected function createFacebookDriver()
{
    $config['client_id'] = 'XXXXXXXXXXXXXXX';
    $config['client_secret'] = 'XXXXXXXXXXXXXXXXXXXX';
    $config['redirect'] = 'http://XXXXXXXXXXX/auth/facebook/callback';

    return $this->buildProvider(
        'Laravel\Socialite\Two\FacebookProvider', $config
    );
}

但它再次抛出错误,显示

driver is not setup
。帮我解决这个问题。 谢谢。

laravel laravel-socialite laravel-5.4
2个回答
1
投票

在您的第 1 步中,按如下所述更新回调并尝试。

$media
实际上是
Request
。因此,在初始化
Socialite::driver($media)
时,您实际上正在传递
Request
,而您必须传递
Facebook

public function callbackSocialLogin(Request $request) {
    $fbDriver = (new SocialiteProvider())->makeFacebookDriver();

    $user = $fbDriver->user();
    $data['name']  = $user->getName();
    $data['email'] = $user->getEmail();
    ...
}

0
投票

在调用 Socialite::driver() 之前,我每次都会这样做

 config(['services.google.client_id' => $clientID]);
 config(['services.google.client_secret' => $clientSecret]);
 config(['services.google.redirect' => $redirect]);
© www.soinside.com 2019 - 2024. All rights reserved.