如何使用 socialite google 驱动程序从 google 获取用户数据
How to get user data from google using socialite google driver
我正在尝试使用 laravel google socialite 驱动程序,我需要使用从 api 调用中获取的访问令牌从 google 获取用户数据.
但是当我认为我已经正确地完成了所有事情时,它给出了一个错误
说 Call to protected method Laravel\Socialite\Two\GoogleProvider::getUserByToken()
我知道它说我无法访问该方法,因为它受到保护。
那么如何解决这个问题。
我的objective
我的 objective 是为了验证我从我的移动应用程序获取的社交访问(基本上是 google)令牌,并将该特定用户的该用户数据存储到我正在接收的数据库中来自 socialite
我在 api.php
的路线
Route::post('login','api\unAuthApiCall@index');
我的控制器
namespace App\Http\Controllers\api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Laravel\Socialite\Facades\Socialite;
class unAuthApiCall extends Controller
{
//Get the authentication token
public function index(Request $request){
//get the auth token
$authToken= Input::get('auth_token');
//Validate authtoken with google and get user's data
$driver = Socialite::driver('google');
$socialUserObject= $driver->getUserByToken($authToken);
return json_encode($socialUserObject);
}
}
我收到回复
{
"message": "Call to protected method Laravel\Socialite\Two\GoogleProvider::getUserByToken() from context 'App\Http\Controllers\api\unAuthApiCall'",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",
"file": "C:\Users\CODED\Documents\laravelSocilte\app\Http\Controllers\api\unAuthApiCall.php",
"line": 28,
"trace": [
{
"function": "index",
"class": "App\Http\Controllers\api\unAuthApiCall",
"type": "->"
}
对我有用
路线
Route::get('/redirect/{provider}', 'Auth\SocialAuthController@redirect');
Route::get('/auth/facebook/callback', 'Auth\SocialAuthController@callback');
Route::get('/auth/google/callback', 'Auth\SocialAuthController@callback');
控制器
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
class SocialAuthController extends Controller
{
protected $driver = ['facebook', 'google'];
public function redirect($provider)
{
if(!in_array($provider, $this->driver)){
abort(400);
}
return Socialite::driver($provider)->redirect();
}
public function callback(Request $request)
{
$provider = $request->segment(2);
if(!in_array($provider, $this->driver)){
abort(400);
}
$user = Socialite::driver($provider)->user();
//save the user or do something else
auth()->login($user);
return redirect()->to('/');
}
}
经过长时间的研究,并到处检查代码。我找到了解决方法。
并没有那么复杂,显然我发现我使用了错误的方法。
这是正确的代码
$token =Input::get('auth');
$provider='google';
$driver= Socialite::driver($provider);
$socialUserObject = $driver->userFromToken($token);
print_r('$socialUserObject');
这将给出完整的用户对象。
我正在尝试使用 laravel google socialite 驱动程序,我需要使用从 api 调用中获取的访问令牌从 google 获取用户数据.
但是当我认为我已经正确地完成了所有事情时,它给出了一个错误
说 Call to protected method Laravel\Socialite\Two\GoogleProvider::getUserByToken()
我知道它说我无法访问该方法,因为它受到保护。 那么如何解决这个问题。
我的objective
我的 objective 是为了验证我从我的移动应用程序获取的社交访问(基本上是 google)令牌,并将该特定用户的该用户数据存储到我正在接收的数据库中来自 socialite
我在 api.php
Route::post('login','api\unAuthApiCall@index');
我的控制器
namespace App\Http\Controllers\api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Laravel\Socialite\Facades\Socialite;
class unAuthApiCall extends Controller
{
//Get the authentication token
public function index(Request $request){
//get the auth token
$authToken= Input::get('auth_token');
//Validate authtoken with google and get user's data
$driver = Socialite::driver('google');
$socialUserObject= $driver->getUserByToken($authToken);
return json_encode($socialUserObject);
}
}
我收到回复
{
"message": "Call to protected method Laravel\Socialite\Two\GoogleProvider::getUserByToken() from context 'App\Http\Controllers\api\unAuthApiCall'",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",
"file": "C:\Users\CODED\Documents\laravelSocilte\app\Http\Controllers\api\unAuthApiCall.php",
"line": 28,
"trace": [
{
"function": "index",
"class": "App\Http\Controllers\api\unAuthApiCall",
"type": "->"
}
对我有用
路线
Route::get('/redirect/{provider}', 'Auth\SocialAuthController@redirect');
Route::get('/auth/facebook/callback', 'Auth\SocialAuthController@callback');
Route::get('/auth/google/callback', 'Auth\SocialAuthController@callback');
控制器
<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;
class SocialAuthController extends Controller
{
protected $driver = ['facebook', 'google'];
public function redirect($provider)
{
if(!in_array($provider, $this->driver)){
abort(400);
}
return Socialite::driver($provider)->redirect();
}
public function callback(Request $request)
{
$provider = $request->segment(2);
if(!in_array($provider, $this->driver)){
abort(400);
}
$user = Socialite::driver($provider)->user();
//save the user or do something else
auth()->login($user);
return redirect()->to('/');
}
}
经过长时间的研究,并到处检查代码。我找到了解决方法。 并没有那么复杂,显然我发现我使用了错误的方法。 这是正确的代码
$token =Input::get('auth');
$provider='google';
$driver= Socialite::driver($provider);
$socialUserObject = $driver->userFromToken($token);
print_r('$socialUserObject');
这将给出完整的用户对象。