Facebook Socialite получить пользователя от токена и секрета - PullRequest
0 голосов
/ 06 сентября 2018

В документах laravel есть часть о том, как заставить пользователя использовать ->userFromTokenAndSecret, однако, похоже, что он не работает с Facebook и возвращает ошибку, что этот метод не существует.

Как получить пользователя по токену и секрету?

Я использую Laravel в качестве API, чтобы он работал без сохранения состояния, и я не использую никаких перенаправлений.
Я вхожу в приложение Angular и отправляю токен. Мне нужно это обработать.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я нашел ответ на свои вопросы, и это userFromToken. В чем идея:

1) Я авторизирую своего пользователя на Angular 6, используя ngx-social-login

2) Я получаю данные пользователя от Facebook

3) Отправляю authToken в API

4) Я получаю пользовательские данные из Facebook через свой бэкэнд-API, используя Socialite::driver('facebook')->stateless()->userFromToken($token)

5) Делай любые вещи, которые я хочу. В моем случае я сохраняю данные в БД или извлекаю пользователя, если он существует, а затем создаю токен для этого пользователя с помощью JWT и возвращаю его

0 голосов
/ 08 сентября 2018

У меня тоже проблема, но нет фейсбука. Я использую Twitter API с этим плагином.

https://github.com/thujohn/twitter

Я использую Socialite после получения токена из плагина Twitter.

Это полно, что я пытался получить токен.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Log;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Session;
use App\Repositories\UserRepository;
use Twitter;
use Redirect;
use Hash;
use App\User;
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 я могу получить электронную почту и другое свойство там.

...