Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook Socialite login with Laravel 5.1

I have followed all the step in http://laravel.com/docs/5.1/authentication to make the social login with facebook on Laravel 5.1.

Here the steps that I've followed:

1 - Use the command in my Laravel root project:

composer require laravel/socialite

2 - register the Laravel\Socialite\SocialiteServiceProvider in your config/app.php configuration file:

'providers' => [
    // Other service providers...

    Laravel\Socialite\SocialiteServiceProvider::class,
],

3 - Add the Socialite facade to the aliases array in your app configuration file:

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

4 - add the facebook services in config/services.php:

 'facebook' => [
        'client_id' => env('FACEBOOK_CLIENT_ID'),
        'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
        'redirect' => 'http://homestead.app/auth/facebook/callback',
    ],

5 - add to my AuthController.php the methods redirectToProvider() and handleProviderCallback():

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Socialite;

class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Redirect path after successful login
     *
     * @var string
     */
    protected $redirectPath = '/greeting';

    /**
     * Redirect path after failed login
     *
     * @var string
     */
    protected $loginPath = '/auth/login';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'getLogout']);
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

    /**
     * Redirect the user to the Facebook authentication page.
     *
     * @return Response
     */


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

    /**
     * Obtain the user information from Facebook.
     *
     * @return Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('facebook')->user();

        dd($user);
    }
}

I want to highlight that I have created AuthController.php in the folder app/Http/Controllers/Auth/ because after it asks to create the routes: 'Auth\AuthController@redirectToProvider' 'Auth\AuthController@handleProviderCallback'

6 - I've added the routes:

Route::get('auth/facebook', 'Auth\AuthController@redirectToProvider');
Route::get('auth/facebook/callback', 'Auth\AuthController@handleProviderCallback');

Now, when I click "Login with facebook" in my login page it goes to http://homestead.app/auth/facebook and get me the following error:

FatalErrorException in AuthController.php line 90: Class 'Socialite' not found

I have tried to follow the codeanchor guide but it is for laravel 5.0 (I need to use that on laravel 5.1)

like image 453
Giuseppe87 Avatar asked Sep 13 '15 13:09

Giuseppe87


People also ask

How auth:: attempt work in Laravel?

The controller creates the user and saves it into the database. Then it redirects the user, who is not yet authenticated, to the login route. The postLogin method gets triggered, but this time with no request data. As a result, Auth::attempt($credentials) fails and you get that nasty Failure on screen.

What is attempt() in Laravel?

The attempt method accepts an array of key / value pairs as its first argument. The password value will be hashed. The other values in the array will be used to find the user in your database table. So, in the example above, the user will be retrieved by the value of the email column.


1 Answers

Finally I have solved with deleting everything and installing Homestead again from the start

like image 57
Giuseppe87 Avatar answered Oct 03 '22 15:10

Giuseppe87