使用 Github 等第三方帐号登录 Laravel 应用

WBOY
Release: 2016-06-23 13:11:31
Original
1143 people have browsed it

Laravel 的 Socialite 使得使用 Facebook、Twitter、Google、LinkedIn、GitHub 以及 Bitbucket 等第三方帐号登录 Larave 应用变得很容易实现。你可以把它们与已存在的用户进行第三方连接,也可以作为主登录机制。虽然 官方文档 中给出了一些步骤,但是很多朋友看完后依然不知道具体如何实现登录功能。今天我们以 Github 为例,详细列出其实现方法。

1. 安装 Socialite

通过 Composer 命令行安装:

$ composer require laravel/socialite
Copy after login

然后把其注册到 config/app.php 中:

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

现在 Socialite 已经注册到你的应用中了,下面我们来设置证书。

2. 创建 Github 应用

首先,你需要拥有一个 Github 帐号,之后到“Setting”–“OAuth applications”–“Developer applications”–“ Register new application ”,创建一个 OAuth 应用:

之后填写应用的信息:

其中的“ Authorization callback URL ”我们这里设置为“http://your-domain-name.com/auth/github/callback”,你需要根据你的应用实际来填写。创建完成之后在应用的详细页面就可以看到“ Client ID ”和“ Client Secret ”的值了。

3. 服务配置

打开 config/services.php 文件,在其中添加 Github 授权信息:

'github' => [    'client_id' => 'your-github-app-id',    'client_secret' => 'your-github-app-secret',    'redirect' => 'http://your-callback-url',],
Copy after login

把第二步创建应用的“ Client ID ”和“ Client Secret ”以及“ Authorization callback URL ”的值填到上面。当然,你也可以在 .env 文件中定义三个环境变量,然后在 config/services.php 中通过 env() 函数获取。

4. 定义路由

routes.php 中添加下面的路由(你可以自定义为任何名称,这里为方便起见直接定义为下面的名称):

Route::get('auth/github', 'Auth\AuthController@redirectToProvider');Route::get('auth/github/callback', 'Auth\AuthController@handleProviderCallback');
Copy after login

下面我们来完成控制器中的这几个方法。

5. 控制器方法

在 Auth\AuthController 中添加下面方法:

public function redirectToProvider()    {        return Socialite::driver('github')->redirect();    }    public function handleProviderCallback()    {        try {            $user = Socialite::driver('github')->user();        } catch (Exception $e) {            return Redirect::to('auth/github');        }        $authUser = $this->findOrCreateUser($user);        Auth::login($authUser, true);        return redirect('/');    }    private function findOrCreateUser($githubUser)    {        if ($authUser = User::where('github_id', $githubUser->id)->first()) {            return $authUser;        }        return User::create([            'name' => $githubUser->name,            'email' => $githubUser->email,            'github_id' => $githubUser->id,            'avatar' => $githubUser->avatar        ]);    }
Copy after login

上面只是实现的一般方法,当然你也可以按照自己的方法来实现。首先跳转到 Github,获得用户授权后再跳转回来到,然后根据 Github ID 查找用户并登录,或者创建一个新的用户。

6. 数据库设计

我们需要修改 users Migration 以便存储一些 Github 特定的信息。Github 会给我们返回很多信息,我们这里选择其中的一些进行存储。

$table->increments('id');            $table->string('github_id')->unique();            $table->string('name');            $table->string('email');            $table->string('avatar');            $table->rememberToken();            $table->timestamps();
Copy after login

由于我们这里是用于演示的,所以直接更改为了上面的样子,你可以根据你的实际需求来设计。Github 为我们返回的信息大致如下:

7. User Eloquent

修改 User Eloquent Model 以便能够存储 Github 的信息:

protected $fillable = ['name', 'email', 'github_id', 'avatar'];
Copy after login

下面我们来看看上面的这些代码是如何具体运行的。

8. 使用

在需要登录的地方添加下面的链接,其目标地址指向我们上面添加的路由 auth/github 。

当用户点击上面的按钮的时候,会跳转到 Github 授权页面,询问用户是否运行授权,当用户允许之后,会跳转回 auth/github/callback ,也就是我们创建应用时填写的“Authorization callback URL”。

之后就会执行回调函数中的代码,登录已经存在的用户,或者创建一个新的用户并登录。

现在我们已经拥有一个经过 Laravel 授权的用户了,可以直接使用 Auth 提供的所有方法,如 Auth::check() 、 Auth:user() 等。你还可以添加一个 logout 路由来运行 Auth::logout() 方法退出登录。之后的操作就可以同使用 Laravel 自带的认证系统一样了。

以上便完成了使用 Github 帐号登录 Laravel 应用的所有步骤,其他第三方应用的实现基本类似。

参考: laravel.com , mattstauffer.co

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!