Facebook Socialite从令牌和秘密中获取用户



在 laravel 文档中,有一部分是关于让用户使用->userFromTokenAndSecret但它似乎不适用于 facebook 并返回此方法不存在的错误。

如何通过令牌和机密获取用户?

我正在使用 Laravel 作为 API,以便它无状态工作,并且不使用任何重定向。
我使用 Angular 应用程序登录并发送令牌。我需要处理它。

我已经找到了问题的答案,它userFromToken.什么想法:

1(我使用ngx-social-login授权我的用户使用Angular 6

2( 我从脸书接收用户数据

3( 我向 API 发送authToken

4( 我在后端 API 上从 Facebook 接收用户数据,使用Socialite::driver('facebook')->stateless()->userFromToken($token)

5(做任何我想做的事。就我而言,我将数据保存到数据库或检索用户(如果存在(,然后使用 JWT 为该用户创建一个令牌并返回它

我也遇到了问题,但不是Facebook。我在这个插件中使用推特 api。

https://github.com/thujohn/twitter

我在从推特插件获取令牌后使用社交名流。

这是我试图获得令牌的全部。

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use Log;
use IlluminateSupportFacadesInput;
use IlluminateSupportFacadesSession;
use AppRepositoriesUserRepository;
use Twitter;
use Redirect;
use Hash;
use AppUser;
use Socialite;
use Auth;
class SocialController extends Controller
{
function login() {
// your SIGN IN WITH TWITTER  button should point to this route
$sign_in_twitter = true;
$force_login = false;
// Make sure we make this request w/o tokens, overwrite the default values in case of login.
Twitter::reconfig(['token' => '', 'secret' => '']);
$token = Twitter::getRequestToken(route('twitter.callback'));
if (isset($token['oauth_token_secret']))
{
$url = Twitter::getAuthorizeURL($token, $sign_in_twitter, $force_login);
Session::put('oauth_state', 'start');
Session::put('oauth_request_token', $token['oauth_token']);
Session::put('oauth_request_token_secret', $token['oauth_token_secret']);
return Redirect::to($url);
}
return Redirect::route('twitter.error');
}
function callback() {
Log::info('callbackk call');
// You should set this route on your Twitter Application settings as the callback
// https://apps.twitter.com/app/YOUR-APP-ID/settings
if (Session::has('oauth_request_token'))
{
$request_token = [
'token'  => Session::get('oauth_request_token'),
'secret' => Session::get('oauth_request_token_secret'),
];
Twitter::reconfig($request_token);
$oauth_verifier = false;
if (Input::has('oauth_verifier'))
{
$oauth_verifier = Input::get('oauth_verifier');
// getAccessToken() will reset the token for you
$token = Twitter::getAccessToken($oauth_verifier);
Log::info('token created: ' . print_r($token,true));
}
if (!isset($token['oauth_token_secret']))
{
Log::info('oauth_token_secret fail');
return Redirect::route('twitter.error')->with('flash_error', 'We could not log you in on Twitter.');
}
$credentials = Twitter::getCredentials([
'include_email' => 'true',
]);
if (is_object($credentials) && !isset($credentials->error))
{
// $credentials contains the Twitter user object with all the info about the user.
// Add here your own user logic, store profiles, create new users on your tables...you name it!
// Typically you'll want to store at least, user id, name and access tokens
// if you want to be able to call the API on behalf of your users.
// This is also the moment to log in your users if you're using Laravel's Auth class
// Auth::login($user) should do the trick.
Session::put('access_token', $token);
Log::info('access_token: ' . print_r($token,true));
$users = Twitter::getUsers([
'user_id'=>$token['user_id']
]);
Log::info('users: ' . print_r($users,true));
if(count($users) > 0) {
// pakai socialite untuk mengambil email
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token['oauth_token'], $token['oauth_token_secret']);
$user_email = $user->getEmail();
$user_name = $user->getName();
if($user_email) {
$this->_set_login($user_name, $user_email);
Log::info("email sets");
} else {
Log::info("email not sets and go with id provider");
}
} else {
Log::info("users not found");
}
return Redirect::to('/')->with('flash_notice', 'Congrats! You've successfully signed in!');
}
Log::info('twitter.error');
return Redirect::route('twitter.error')->with('flash_error', 'Crab! Something went wrong while signing you up!');
}
Log::info('end callbackk call');
}
private function _set_login($user_name, $user_email) {
$UserRepository = new UserRepository;
$data_user = $UserRepository->getByEmail($user_email);
if(count($data_user) > 0) {
// sudah terdaftar
$user_id = $data_user->id;
} else {
// belum terdaftar dan jalankan proses register
$data_save = [
'name' => $user_name,
'email' => $user_email,
'password' => Hash::make($user_email)
];
$user_id = $UserRepository->save_data($data_save);
}
$user = User::find($user_id);
Auth::login($user);
}
}

也许它可以帮助你。

点代码在这里

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token['oauth_token'], $token['oauth_token_secret']);

因此,有了$user,我可以在那里获得电子邮件和另一个属性。

我有一个解决方法来避免方法不存在"错误">

$user = call_user_func(array(Socialite::driver("facebook"),"userFromToken"),$token);

最新更新