如何解决使用数据库中的key和secret在laravel 8中实现Facebook登录
我正在创建一个多供应商网络应用程序,我需要在其中为客户实现 login with Facebook
。供应商可以拥有自己的域或子域,也可以拥有自己的客户。在网站中,我通过使用环境变量实现了 Facebook 登录。代码如下。
facebook登录路径
Route::get('auth/facebook','FacebookController@redirectToFacebook');
Route::get('auth/facebook/callback','FacebookController@handleFacebookCallback');
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),'client_secret' => env('FACEBOOK_CLIENT_SECRET'),'redirect' => env('FACEBOOK_CALLBACK_URL'),],
Facebook 控制器功能
public function redirectToFacebook()
{
return Socialite::driver('facebook')->redirect();
}
public function handleFacebookCallback()
{
try {
$user = Socialite::driver('facebook')->user();
$user_name = $user->getName();
$user_email = $user->getEmail();
$facebook_auth_id = $user->getId();
/* other code */
} catch (Exception $e) {
return redirect()->route('login')->with(['error' => "facebook login Failed."]);
}
}
但我想使用存储在数据库中的供应商的 Facebook 密钥和机密。我如何在这里使用动态变量来实现功能?
解决方法
确保这些包应该包含在你的控制器中
use Laravel\Socialite\SocialiteManager;
use Socialite;
use Laravel\Socialite\Two\FacebookProvider;
在控制器中使用以下代码
public function redirectToFacebook(Request $request)
{
$fb = $this->configDriver($request);
return $fb->redirect();
}
private function configDriver(Request $request,$domain = '',$driver = 'facebook')
{
$config['client_id'] = 'your_client_id';
$config['client_secret'] = 'your_client_secret';
$config['redirect'] = 'your_redirect_url';
return Socialite::buildProvider(FacebookProvider::class,$config);
}
public function handleSocialCallback(Request $request,$driver = 'facebook')
{
$usr = $this->configDriver($request)->stateless()->user();
$name = $user->getName();
$email = $user->getEmail();
$facebook_id = $user->getId();
/*save data in db*/
}
,
这是使用 Laravel Socialite 实现的。
https://github.com/jd-patel/laravel-social-login
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。