”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 Laravel 中实现“使用 Facebook 登录”

如何在 Laravel 中实现“使用 Facebook 登录”

发布于2024-10-31
浏览:831

How to Implement \

本教程将指导您完成向 Laravel 应用程序添加 Facebook 登录功能的过程。

先决条件

  • Laravel 项目建立
  • 已安装作曲家
  • Facebook 开发者帐户

第 1 步:创建 Facebook 应用程序

  1. 前往 Facebook 开发者
  2. 点击“我的应用程序”,然后点击“创建应用程序”
  3. 选择“Consumer”作为应用类型
  4. 填写应用详细信息并创建应用
  5. 在应用程序仪表板中,记下您的应用程序 ID 和应用程序密钥

第 2 步:安装 Laravel Socialite

Laravel Socialite 为 Facebook、Twitter、Google、LinkedIn、GitHub、GitLab 和 Bitbucket 的 OAuth 身份验证提供了一个富有表现力、流畅的界面。
通过 Composer 安装:

composer require laravel/socialite

第 3 步:配置社交名流

将以下内容添加到您的 config/services.php 文件中:

'facebook' => [
    'client_id' => env('FACEBOOK_CLIENT_ID'),
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
    'redirect' => env('FACEBOOK_REDIRECT_URI'),
],

然后,将这些添加到您的 .env 文件中:

FACEBOOK_CLIENT_ID=your_facebook_app_id
FACEBOOK_CLIENT_SECRET=your_facebook_app_secret
FACEBOOK_REDIRECT_URI=http://localhost:8000/login/facebook/callback

第 4 步:设置路线

将这些路由添加到您的routes/web.php中:

use App\Http\Controllers\Auth\FacebookController;

Route::get('login/facebook', [FacebookController::class, 'redirectToFacebook'])->name('login.facebook');
Route::get('login/facebook/callback', [FacebookController::class, 'handleFacebookCallback']);

第5步:创建FacebookController

创建一个新控制器:

php artisan make:controller Auth/FacebookController

实现控制器:

redirect();
    }

    public function handleFacebookCallback()
    {
        try {
            $user = Socialite::driver('facebook')->user();
            $finduser = User::where('facebook_id', $user->id)->first();

            if ($finduser) {
                Auth::login($finduser);
                return redirect()->intended('dashboard');
            } else {
                $newUser = User::create([
                    'name' => $user->name,
                    'email' => $user->email,
                    'facebook_id'=> $user->id,
                    'password' => encrypt('123456dummy')
                ]);

                Auth::login($newUser);
                return redirect()->intended('dashboard');
            }
        } catch (\Exception $e) {
            dd($e->getMessage());
        }
    }
}

第 6 步:更新用户模型

将 facebook_id 添加到用户模型中的可填充数组中:

protected $fillable = [
    'name',
    'email',
    'password',
    'facebook_id',
];

第 7 步:将 Facebook ID 添加到用户表中

创建新迁移:

php artisan make:migration add_facebook_id_to_users_table

在新的迁移文件中:

public function up()
{
    Schema::table('users', function ($table) {
        $table->string('facebook_id')->nullable();
    });
}

public function down()
{
    Schema::table('users', function ($table) {
        $table->dropColumn('facebook_id');
    });
}

运行迁移:

php artisan migrate

第8步:添加登录按钮

在您的登录视图中,添加“使用 Facebook 登录”按钮:


    Login with Facebook

版本声明 本文转载于:https://dev.to/johnmaths9/how-to-implement-login-with-facebook-in-laravel-2m5p?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-03-13
  • 内部联接是否覆盖了外部连接的零值?
    内部联接是否覆盖了外部连接的零值?
    [2 了解内部和外部连接在SQL 复杂的SQL查询经常使用多个联接操作,结合了不同的联接类型。 一个关键的考虑因素是,当随后应用内部连接时,null值的包含(外部连接的特征)如何受到影响。如何影响外部加入结果 的性质,仅在让我们检查一个方案: 选择 * 来自人 左加入地址。 内部加入电子邮件per...
    编程 发布于2025-03-13
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-03-13
  • Go Web服务器:安全释放特权端口绑定后的权限方法
    Go Web服务器:安全释放特权端口绑定后的权限方法
    在GO(v1.7)在早期版本中,利用syscall.setuid()丢弃特权将返回“不支持”。作为替代方案,可以使用iPtables将80转移到非特权端口。但是,该解决方案通过允许非root进程模拟Web服务器来打开安全漏洞。该解决方案在于使用GO的网络和系统呼叫功能的组合。打开特权端口并确定UI...
    编程 发布于2025-03-13
  • 在C#中创建和写入文件时,如何防止文件碰撞?
    在C#中创建和写入文件时,如何防止文件碰撞?
    [2 [2 如果已经访问了目标文件,则创建和写入C#中的文件可能会导致错误。 即使使用在尝试使用创建它们之前,通常也会发生这种情况。 后续写操作(例如)然后抛出异常。 通用解决方案涉及关闭由 在这种情况下,这不是理想的。 一种更有效,更强大的方法是直接使用 file.writealltext...
    编程 发布于2025-03-13
  • 如何查询Zabbix以显示主机 - 网板关系?
    如何查询Zabbix以显示主机 - 网板关系?
    查询以在zabbix 中查询此查询有助于从zabbix表中检索数据,以显示hosts hosts使用特定模板。挑战在于事实是,主机和模板都存储在同一张表中,与诸如主机11813之类的ID和模板的11815混合在一起。解决此问题,我们介绍了hosts_templates表格,该表通过主机和模板之间的连...
    编程 发布于2025-03-13
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-03-13
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-03-13
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-03-13
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-13
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-03-13
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-03-13
  • Python转C/C++性能提升?值得吗?深度解析
    Python转C/C++性能提升?值得吗?深度解析
    将python代码转换为c/c进行性能优化评估Python和C/C之间的性能差距的一种策略是在两种语言中实施一个简单的算法并基准为其进行基准测试。但是,重要的是要认识到,过早转换为C/C可能不会产生最佳结果。相反,专家建议以下顺序方法:Measure Performance with Profil...
    编程 发布于2025-03-13
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-03-13

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3