首页 php框架 Laravel Laravel开发:如何使用Laravel Socialite快速集成第三方登录?

Laravel开发:如何使用Laravel Socialite快速集成第三方登录?

Jun 13, 2023 pm 10:09 PM
laravel 第三方登录 socialite

Laravel是一种流行的PHP框架,用于开发Web应用程序。其中一个最常见的功能是在应用程序中集成第三方登录。这样做可以为用户提供更好的用户体验,减少注册重复流程。

在本文中,我们将讨论如何使用Laravel Socialite库集成第三方登录。

什么是Laravel Socialite?

Laravel Socialite是Laravel框架的一个扩展包,它允许开发人员在应用程序中轻松实现第三方登录。它支持各种社交平台,如Facebook,Twitter,LinkedIn等。

Socialite如何工作?

Socialite遵循OAuth协议。 OAuth是一种授权框架,它允许用户将其帐户信息从一个站点传递到另一个站点,而无需共享其凭据。 OAuth需要用户授权,在这种情况下,用户将授权应用程序访问其社交媒体帐户。

Socialite授权工作原理如下:

  1. 用户单击“登录”按钮,该按钮将指向Socialite授权:

    Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider');
    登录后复制
  2. Socialite挑战用户以授权访问其社交媒体帐户; Socialite将重定向到社交媒体站点;

    Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
    登录后复制

3.用户授权自己的帐户,社交媒体网站重定向到回调URL;

public function redirectToProvider($provider)
{
  return Socialite::driver($provider)->redirect();
}
登录后复制
  1. Socialite将带有授权代码的回调URL返回应用程序,应用程序将用授权代码请求OAuth访问令牌;

    public function handleProviderCallback($provider)
    {
    $socialUser = Socialite::driver($provider)->user();
    }
    登录后复制
  2. 完成认证,Socialite将返回用户授权的令牌,并将其传递到应用程序中。

如何在Laravel中使用Socialite?

使用Socialite支持的任何社交媒体平台,您需要在以下两个地方设置应用程序凭据或密钥:

    'facebook' => [
        'client_id' => env('FB_CLIENT_ID'),
        'client_secret' => env('FB_CLIENT_SECRET'),
        'redirect' => env('FB_CALLBACK_URL'),
    ]

    'twitter' => [
        'client_id' => env('TW_CLIENT_ID'),
        'client_secret' => env('TW_CLIENT_SECRET'),
        'redirect' => env('TW_CALLBACK_URL'),
    ],

    'google' => [
         'client_id' => env('GOOGLE_CLIENT_ID'),
         'client_secret' => env('GOOGLE_CLIENT_SECRET'),
         'redirect' => env('GOOGLE_CALLBACK_URL')
    ]
登录后复制

应用程序凭据或密钥旨在验证应用程序的身份。

我们将在config / services.php文件中进行此设置。

步骤1:创建授权路由

创建用于触发Socialite授权的路由:

Route::get('auth/{provider}', 'AuthSocialController@redirectToProvider');
Route::get('auth/{provider}/callback', 'AuthSocialController@handleProviderCallback');
登录后复制

通常将这些路由放置在一个名为SocialController的控制器中,该控制器用于处理Socialite授权和回调。

步骤2:创建SocialController

像所有控制器一样,我们需要创建使用良好的代码实践的SocialController。

使用以下命令来创建控制器:

php artisan make:controller AuthSocialController
登录后复制

最终,这将使我们可以使用授权提供程序进行授权并回调我们的路由。

在SocialController中,我们定义了两个方法,redirectToProvider和handleProviderCallback。 第一个是重定向至授权提供程序。 随后的回调函数则为具有授权代码的客户端检索信息并完成身份验证的客户端提供回调URL。

以下是SocialController的示例代码:

namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateSupportFacadesAuth;
use IlluminateHttpRequest;
use LaravelSocialiteFacadesSocialite;

class SocialController extends Controller
{
    /**
     * Redirect the user to the OAuth Provider.
     *
     * @return IlluminateHttpResponse
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }
    /**
     * Obtain the user information from OAuth Provider.
     *
     * @return IlluminateHttpResponse
     */
    public function handleProviderCallback($provider)
    {
        $user = Socialite::driver($provider)->user();

        // Do something with user data, for example:
        // $user->token;
        // $user->getId();
        // $user->getEmail();
    }
}
登录后复制

步骤3:使用视图控制器

通常,我们会使用视图控制器来管理渲染我们的所有视图。 这使我们的代码更易于阅读和管理。 让我们使用Laravel的视图控制器为我们的应用程序创建一个简单的视图。

使用以下命令来创建视图控制器:

php artisan make:controller SocialAuthController
登录后复制

以下是在该控制器中所做的更改。

namespace AppHttpControllers;

use IlluminateHttpRequest;

class SocialAuthController extends Controller
{
    /**
     * Redirect the user to the OAuth Provider.
     *
     * @return IlluminateHttpResponse
     */
    public function redirectToProvider($provider)
    {
        return Socialite::driver($provider)->redirect();
    }

    /**
     * Obtain the user information from OAuth Provider.
     *
     * @return IlluminateHttpResponse
     */
    public function handleProviderCallback($provider)
    {
        $user = Socialite::driver($provider)->user();
        $existingUser = User::where('email', $user->getEmail())->first();
        if ($existingUser) { // If user already exists, login the user                
            auth()->login($existingUser, true);
        } else { // Register new user                    
            $newUser = new User();
            $newUser->name = $user->getName();
            $newUser->email = $user->getEmail();
            $newUser->google_id = $user->getId();
            $newUser->password = encrypt('amitthakur');
            $newUser->save();
            auth()->login($newUser, true);
        }
        return redirect()->to('/home');
    }
}
登录后复制

步骤4:创建登录视图

现在我们的控制器和路由都已准备就绪。 现在我们需要创建用于登录的视图。

创建一个视图文件并将其命名为social_login.blade.php。 我们需要显示可以触发第三方登录的按钮。 在这种情况下,我们将展示3个按钮,以支持Google,Facebook和Twitter的登录。

以下是视图文件的示例代码:

@extends('layouts.app')
@section('content')
<main class="py-4">
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">{{ __('Login') }}</div>
                    <div class="card-body">
                        <a href="{{ route('social.oauth', ['provider' => 'google']) }}" class="btn btn-google">Sign in with google</a>
                        <a href="{{ route('social.oauth', ['provider' => 'facebook']) }}" class="btn btn-facebook">Sign in with Facebook</a>
                        <a href="{{ route('social.oauth', ['provider' => 'twitter']) }}" class="btn btn-twitter">Sign in with twitter</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</main>
@endsection
登录后复制

顶部使用布局文件。当用户单击任何按钮时,我们将它们重定向到授权提供程序。 在SocialController respond中,我们将获得用户数据并完成身份验证。

步骤5:创建新路由

现在我们需要创建新路由以处理上面的视图文件。

修改web.php文件,如下所示:

Route::get('social', 'SocialAuthController@index')->name('social.login');
Route::get('social/{provider}', 'SocialAuthController@redirectToProvider')->name('social.oauth');
Route::get('social/{provider}/callback', 'SocialAuthController@handleProviderCallback');
登录后复制

我们应该注意,上面的路由通过名称进行标识,以便可以在控制器代码中引用它们。

步骤6:测试

现在我们已经设置了我们的社交媒体标识,在测试应用程序之前,我们需要通过.env文件对我们的应用程序进行配置。

要配置.env文件,请添加以下代码:

FACEBOOK_CLIENT_ID=xxxxxxxxxxxxxxxxx
FACEBOOK_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx
FACEBOOK_CALLBACK_URL=http://www.example.com/auth/facebook/callback

GOOGLE_CLIENT_ID=xxxxxxxxxxxxxxxxx
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx
GOOGLE_CALLBACK_URL=http://www.example.com/auth/google/callback

TWITTER_CLIENT_ID=xxxxxxxxxxxxxxxxx
TWITTER_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx
TWITTER_CALLBACK_URL=http://www.example.com/auth/twitter/callback
登录后复制

该行中用“xxxxxxxxxxxxxxxxx”替换实际的应用程序标识。 之后,我们可以通过命令行启动我们的应用程序,并访问上面的视图文件。 一旦我们单击任何按钮并通过OAuth授权我们的帐户,我们将以已知的每个用户进行身份验证。

结论

在本文中,我们学习了如何使用Laravel Socialite库集成第三方登录。 Socialite的主要目的是简化社交媒体登录流程,以提高用户体验。 我们学习了如何设置Socialite以支持Google,Facebook和Twitter。 我们还在控制器中检索授权代码,并使用请求的数据完成OAuth身份验证。 该过程实际上将创建新帐户或更新现有帐户。

以上是Laravel开发:如何使用Laravel Socialite快速集成第三方登录?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Laravel和CodeIgniter的最新版本对比 Laravel和CodeIgniter的最新版本对比 Jun 05, 2024 pm 05:29 PM

Laravel9和CodeIgniter4的最新版本提供了更新的特性和改进。Laravel9采用MVC架构,提供数据库迁移、身份验证和模板引擎等功能。CodeIgniter4采用HMVC架构,提供路由、ORM和缓存。在性能方面,Laravel9的基于服务提供者设计模式和CodeIgniter4的轻量级框架使其具有出色的性能。在实际应用中,Laravel9适用于需要灵活性和强大功能的复杂项目,而CodeIgniter4适用于快速开发和小型应用程序。

Laravel 和 CodeIgniter 对于初学者来说哪一个更友好? Laravel 和 CodeIgniter 对于初学者来说哪一个更友好? Jun 05, 2024 pm 07:50 PM

对于初学者来说,CodeIgniter的学习曲线更平缓,功能较少,但涵盖了基本需求。Laravel提供了更广泛的功能集,但学习曲线稍陡。在性能方面,Laravel和CodeIgniter都表现出色。Laravel具有更广泛的文档和活跃的社区支持,而CodeIgniter更简单、轻量级,具有强大的安全功能。在建立博客应用程序的实战案例中,Laravel的EloquentORM简化了数据操作,而CodeIgniter需要更多的手动配置。

Laravel和CodeIgniter:哪种框架更适合大型项目? Laravel和CodeIgniter:哪种框架更适合大型项目? Jun 04, 2024 am 09:09 AM

在选择大型项目框架时,Laravel和CodeIgniter各有优势。Laravel针对企业级应用程序而设计,提供模块化设计、依赖项注入和强大的功能集。CodeIgniter是一款轻量级框架,更适合小型到中型项目,强调速度和易用性。对于具有复杂需求和大量用户的大型项目,Laravel的强大功能和可扩展性更合适。而对于简单项目或资源有限的情况下,CodeIgniter的轻量级和快速开发能力则更为理想。

Laravel - Artisan 命令 Laravel - Artisan 命令 Aug 27, 2024 am 10:51 AM

Laravel - Artisan 命令 - Laravel 5.7 提供了处理和测试新命令的新方法。它包括测试 artisan 命令的新功能,下面提到了演示?

Laravel和CodeIgniter:哪种框架更适合小型项目? Laravel和CodeIgniter:哪种框架更适合小型项目? Jun 04, 2024 pm 05:29 PM

对于小型项目,Laravel适用于大型项目,需要强大的功能和安全性。CodeIgniter适用于非常小的项目,需要轻量级和易用性。

Laravel 和 CodeIgniter 的模板引擎哪一个更好? Laravel 和 CodeIgniter 的模板引擎哪一个更好? Jun 03, 2024 am 11:30 AM

比较了Laravel的Blade和CodeIgniter的Twig模板引擎,根据项目需求和个人偏好进行选择:Blade基于MVC语法,鼓励良好代码组织和模板继承。Twig是第三方库,提供灵活语法、强大过滤器、扩展支持和安全沙箱。

Laravel - Artisan 控制台 Laravel - Artisan 控制台 Aug 27, 2024 am 10:51 AM

Laravel - Artisan Console - Laravel 框架提供了三种主要的命令行交互工具,即:Artisan、Ticker 和 REPL。本章详细介绍了 Artisan。

Laravel - 分页自定义 Laravel - 分页自定义 Aug 27, 2024 am 10:51 AM

Laravel - 分页自定义 - Laravel 包含分页功能,可帮助用户或开发人员包含分页功能。 Laravel 分页器与查询构建器和 Eloquent ORM 集成。自动分页方法

See all articles