【问题标题】:Dynamic facebook app credentials for Laravel 5.1 socialiteLaravel 5.1 社交名流的动态 facebook 应用程序凭据
【发布时间】:2016-01-01 05:46:46
【问题描述】:

我们正在尝试为 Laravel 5.1 社交名流使用动态 facebook 应用程序凭据。

config/services.php

'facebook' => [
    'client_id' => 'xxxx',
    'client_secret' => 'xxxx',
    'redirect' => 'http://example.com/facebook-callback',
],

在我的控制器文件上:

public function getConnectFacebook()
{
    return Socialite::driver('facebook')->redirect();
}

public function getFacebookCallback()
{
    $user = Socialite::driver('facebook')->user();        
}

我们试图以这种方式覆盖 facebook 驱动程序:

public function getConnectFacebook()
{
     Config::Set("services.facebook.client_id", "dynamic_app_id");
     Config::Set("services.facebook.client_secret", "dynamic_app_secret");
     Config::Set("services.facebook.redirect", "dynamic_app_redirect");        
     return Socialite::driver('facebook')->redirect();
}    

但它不起作用。您能否让我知道我们如何实现这一目标?

谢谢。

【问题讨论】:

    标签: facebook laravel laravel-5.1 laravel-socialite


    【解决方案1】:

    喜欢这个

     return Socialite::driver('facebook')->redirect()->setTargetUrl('your callback url');
    

    【讨论】:

    • 如何动态设置client_id和client_secret?
    【解决方案2】:

    这是我的解决方案。

        private function makeFacebookDriver($domain){
    //grab and set your config values from database or array. Don't do Config::Set.
    $config['client_id'] = '';//grab fb id based from db based on domain
                $config['client_secret'] = '';//grab fb secret from db based on domain
                $config['redirect'] = 'http://'.$domain.'/fbcallback';
                return  Socialite::buildProvider(\Laravel\Socialite\Two\FacebookProvider::class, $config);
        }
    

    然后使用该函数而不是调用 Socialite::driver('Facebook');

    $fb = $this->makeFacebookDriver('www.test.com');
    return $fb->redirect();
    

    【讨论】:

    • 回调时如何实现。我的意思是它重定向很好,而回调它再次获取服务文件进行配置。
    • 在回调中不工作总是返回未经授权的。你知道如何设置回调吗?
    【解决方案3】:

    只需在您的控制器中使用它

    use Laravel\Socialite\Two\FacebookProvider;
    

    配置

       $config = [
            'client_id'    => '969935-d61celu1qck667krmbgql.apps.googlesercontent.com',
            'client_secret' => 'sHrnnOz3Fmz4',
            'redirect'     => 'http://localhost:8000/api/login/facebook/callback'
        ];
      $user=  Socialite::buildProvider(FacebookProvider::class, $config)->stateless();
      return $user->redirect();
    

    回调中的无状态

    $userSocial =$config = [
            'client_id'    => '969d61celu1qck667krmbgql.apps.googlesercontent.com',
            'client_secret' => 'sHrnnO3Fmz4',
            'redirect'     => 'http://localhost:8000/api/login/facebook/callback'
        ];
      $user=Socialite::buildProvider(FacebookProvider::class, $config)- 
    >stateless()->user();
    

    api 或 web.php

    Route::get('login/{provider}', 'SocialController@redirect');
    Route::get('login/{provider}/callback','SocialController@Callback');
    

    【讨论】:

      【解决方案4】:

      您也可以进行简单的查找和替换。

      假设你有一个这样的配置文件

      'facebook' => [
          'client_id' => '{ID}',
          'client_secret' => '{SECRET}',
          'redirect' => '{REDIRECT}',
      ],
      

      现在你可以在你的控制器中做这样的事情了。

      $fileName = 'path/to/file.php'; 
      
      $configData = file_get_contents($file);
      
      $configData = str_replace('{ID}','dynamic_id',$configData);
      $configData = str_replace('{SECRET}','dynamic_secret',$configData);
      $configData = str_replace('{REDIRECT}','dynamic_link',$configData);
      
      file_put_contents($file, $configData);
      

      就是这样,没什么好说的了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-09
        • 2017-04-04
        • 1970-01-01
        • 2016-06-07
        • 2015-10-11
        • 2015-10-14
        • 2017-02-21
        • 2016-01-13
        相关资源
        最近更新 更多