使用Socialite包进行Laravel Google OAuth身份验证

使用Socialite包进行Laravel Google OAuth身份验证

在本节中,我们将学习关于Google OAuth身份验证的内容。我们将使用Laravel和socialite包来完成这个任务。社交网络正在遍布全球,很多人与之相连。因此,我们的网站需要实现社交身份验证,因为Twitter,Facebook,Github,Google等社交网络与许多开发者和用户相关联。在我们的应用程序中,我们将看到如何登录和注册一个Google帐户。使用Laravel,我们可以非常容易地注册我们的Google ID并登录到Google帐户。socialite包由Laravel 5提供,被用于社交身份验证。为了登录和退出,步骤如下:

步骤1:

在这一步中,我们将进行 socialite包的安装 。这个包用于提供与Google帐户建立连接的fb api。为了实现这一点,我们将使用命令提示符运行以下命令:

composer require laravel/socialite

当上述软件包安装成功后,我们将使用一个名为config file的文件,并将别名和提供者添加到其中。现在,我们将使用一个名为config/app.php的文件,并将别名和服务提供者添加到其中,如下所示:

'providers' => [
    ....
    Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
    ....
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],

步骤2:

在这一步,我们将 创建Google应用程序 。为此,我们需要Google客户端和秘钥的ID。使用这些详细信息,我们可以获取其他用户的信息。如果我们没有,我们可以使用以下链接创建Google应用程序帐户:

https://console.cloud.google.com/projectselector2/apis/dashboard?supportedpurview=project

当我们点击这个链接时,我们将得到以下页面:

使用Socialite包进行Laravel Google OAuth身份验证

现在我们将点击Credentials。然后选择第一个选项OAuth。然后点击名为Create new Client ID的按钮。然后我们将看到以下页面:

使用Socialite包进行Laravel Google OAuth身份验证

当我们完成创建帐户的过程后,我们可以复制用户的id和secret。现在我们将使用配置文件设置应用程序的id,secret和回调URL。为此,我们将打开一个名为config/services.php的文件,然后设置id和secret的值如下:

config/services.php

return [
    ....
    'google' => [
        'client_id' => 'app id',
        'client_secret' => 'add secret',
        'redirect' => 'http://learnl52.hd/auth/google/callback',
    ],
]

步骤3:

在这一步中,我们要 创建Google登录账号 。现在我们需要通过在用户表中创建迁移来添加google_id。创建迁移的代码如下所示:

迁移

Schema::table('users', function (table) {table->string('google_id');
});

当我们成功添加google_id列时,我们首先需要通过添加新的路由来登录Google。 为此,我们将使用routes.php文件,并像这样将以下路由代码添加到其中:

app/Http/routes.php

Route::get('google', function () {
    return view('googleAuth');
});
Route::get('auth/google', 'Auth\AuthController@redirectToGoogle');
Route::get('auth/google/callback', 'Auth\AuthController@handleGoogleCallback');

当我们成功添加路由时,我们需要添加Google身份验证方法。使用这个方法,我们可以处理Google回调的URL等。我们将使用一个名为AuthController.php的文件,并将以下代码添加到其中,如下所示:

app/Http/Controllers/Auth/AuthController.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;
use Auth;
use Exception;

class AuthController extends Controller
{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected redirectTo = '/';

    public function __construct()
    {this->middleware('guest', ['except' => 'logout']);
    }

    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',
        ]);
    }

    protected function create(array data)
    {
        return User::create([
            'name' =>data['name'],
            'email' => data['email'],
            'password' => bcrypt(data['password']),
        ]);
    }

    public function redirectToGoogle()
    {
        return Socialite::driver('google')->redirect();
    }

    public function handleGoogleCallback()
    {
        try {
            user = Socialite::driver('google')->user();userModel = new User;
            createdUser =userModel->addNew(user);
            Auth::loginUsingId(createdUser->id);
            return redirect()->route('home');
        } catch (Exception $e) {
            return redirect('auth/facebook');
        }
    }
}

在此之后,我们需要添加 blade 视图。为此,我们将创建一个名为 googleAuth.blade.php 的新文件,然后将以下代码添加到其中,如下所示:

resources/views/googleAuth.blade.php

@extends('layouts.app')
@section('content')
<style type="text/css">
.account-box
{
    border: 2px solid rgba(153, 153, 153, 0.75);
    border-radius: 2px;
    -moz-border-radius: 2px;
    -webkit-border-radius: 2px;
    -khtml-border-radius: 2px;
    -o-border-radius: 2px;
    z-index: 3;
    font-size: 13px !important;
    font-family: "Helvetica Neue" ,Helvetica,Arial,sans-serif;
    background-color: #ffffff;
    padding: 20px;
}
.logo
{
    background-position: 0 -4px;
    margin: -5px 0 17px 80px;
    position: relative;
    text-align: center;
    width: 138px;
}
.forgotLnk
{
    margin-top: 10px;
    display: block;
}
.or-box
{
    position: relative;
    border-top: 1px solid #dfdfdf;
    padding-top: 20px;
    margin-top:20px;
}
</style>
<div class="container">
    <div class="row">
        <div class="col-md-4 col-md-offset-4">
            <div class="account-box">
                <div class="logo ">
                    <img src="http://design.ubuntu.com/wp-content/uploads/ubuntu-logo32.png" width="80px" alt=""/>
                </div>
                <form class="form-signin" action="#">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Email" required autofocus />
                </div>
                <div class="form-group">
                    <input type="password" class="form-control" placeholder="Password" required />
                </div>
                <button class="btn btn-lg btn-block btn-primary" type="submit">
                    Sign in</button>
                </form>
                <a class="forgotLnk" href="http://www.jquery2dotnet.com">I can't access my account</a>
                <div class="or-box">
                    <div class="row">
                        <div class="col-md-12 row-block">
                            <a href="{{ url('auth/google') }}" class="btn btn-lg btn-danger btn-block">
                                <strong>Login With Google</strong>
                            </a>
                        </div>
                    </div>
                </div>
                <div class="or-box row-block">
                    <div class="row">
                        <div class="col-md-12 row-block">
                            <a href="http://www.jquery2dotnet.com" class="btn btn-primary btn-block">Create New Account</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

现在我们的上述代码已经准备好运行。当我们打开我们的URL时,将会生成以下输出:

使用Socialite包进行Laravel Google OAuth身份验证

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程