Laravel开发:如何使用Laravel Socialite实现Github登录?

在当今互联网时代,用户的登录已经成为了绝大部分web应用必须要考虑的事情。这也意味着web应用需要为用户提供可选择的多重登录方式,来降低用户的登录困难度和优化用户体验。

作为当前最受欢迎的PHP框架之一,Laravel提供了一些非常方便的方式来实现用户的身份验证,其中Laravel Socialite是一个非常强大的用户身份验证解决方案,它允许应用使用第三方平台作为身份验证提供者。

在本文中,我们将介绍如何使用Laravel Socialite来实现Github登录的功能。下面我们来逐步实现这个目标。

步骤1:创建Github应用

在开始本文之前,首先需要注册和创建一个Github账号,并且在Github中创建一个OAuth应用程序。创建应用的过程相对简单,只需遵循以下几个步骤:

登陆Github账号,在 Github Settings -> Developer settings -> OAuth Apps页面中创建新的OAuth App

在第一部分填写App名称、Homepage URL和Callback URL

Callback URL 即登陆成功后返回的Website地址,需要在Laravel网站后台定义

提交表单后返回的页面中会显示Github应用程序的client_id和client_secret。client_id 将用于配置Laravel Socialite的Github驱动程序。

步骤2:安装 Laravel Socialite

安装 Laravel Socialite 可以通过Composer轻松完成。只需在项目目录下的命令行中输入以下指令即可:

composer require laravel/socialite

步骤3:配置服务提供者和 Facade 引用

打开 config/app.php 配置文件,找到 providers 数组和 aliases 数组,将 Socialite 服务提供者和 Facade 引用添加到对应的数组中。

'providers' => [    // Other service providers...    LaravelSocialiteSocialiteServiceProvider::class,],'aliases' => [    // Other aliases...    'Socialite' => LaravelSocialiteFacadesSocialite::class,],

步骤4:定义Github驱动配置

在 config/services.php 配置文件中添加以下配置:

'github' => [    'client_id' => env('GITHUB_CLIENT_ID'),    'client_secret' => env('GITHUB_CLIENT_SECRET'),    'redirect' => env('GITHUB_REDIRECT'),],

步骤5:定义Github登录链接

打开登录页面的 blade 模板文件,添加以下代码:

GitHub Copilot GitHub Copilot

GitHub AI编程工具,实时编程建议

GitHub Copilot 48 查看详情 GitHub Copilot

 Github 登录

这将创建一个链接,通过访问 /auth/github,将会跳转到Github的登录页面。

步骤6:定义Github回调函数

打开我们在Github中注册时的 Callback URL 页面并获取链接中的code参数,并在Laravel路由中添加以下代码:

Route::get('auth/github/callback', function () {    $user = Socialite::driver('github')->user();    // 如果在本地没有找到该用户,则创建新用户    $existingUser = User::where('email', $user->getEmail())->first();    if ($existingUser) {        auth()->login($existingUser, true);    } else {        $newUser                  = new User;        $newUser->name            = $user->getNickname();        $newUser->email           = $user->getEmail();        $newUser->github_id       = $user->getId();        $newUser->avatar          = $user->getAvatar();        $newUser->provider        = 'github';        $newUser->save();        auth()->login($newUser, true);    }    return redirect()->to('/home');});

这里需要注意的是,我们需要将github_id保存在数据库中以便需要时进行登录验证,同时也保存了用户昵称和头像方便展示。

步骤7:创建.env文件

打开项目根目录下的 .env 文件,添加以下 Github 相关配置:

GITHUB_CLIENT_ID=your-github-client-id-hereGITHUB_CLIENT_SECRET=your-github-client-secret-hereGITHUB_REDIRECT=http://localhost:8000/auth/github/callback

上述配置中,你需要将 your-github-client-id-hereyour-github-client-secret-here 替换为你自己在Github获取到的client_id和client_secret。GITHUB_REDIRECT的值应该是Github上注册应用程序时的重定向URI参数。

好了,现在你可以尝试用 Github 登录来测试你的应用程序了。当你访问 /auth/github 时,你应该被重定向到 Github 的登录页面。输入你的 Github 账号后,你应该会被重定向回到你通过 Callback URI 指定的地址。

使用 Laravel Socialite 确实是实现身份验证的一种快速、简便的方法,它还支持其他很多账号认证服务提供商,如Facebook、Twitter、Google等等。舒适且高效的第三方登录方式能够极大地提升用户的体验,为Web应用添加多重登录方式也逐渐成为了一种必要。相比起自己独立实现一套认证系统,使用 Laravel Socialite 则可以利用现有的优秀的认证服务提供商来简化身份验证方案的实现。

以上就是Laravel开发:如何使用Laravel Socialite实现Github登录?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/597622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
剑网3好看捏脸数据大全
上一篇 2025年11月10日 18:56:53
淘宝店铺引流的两大基本方法是什么?「淘宝店铺流量暴涨秘籍」SEO优化+活动运营双管齐下,6个月搜索量提升420%(附实操模板)!
下一篇 2025年11月10日 18:56:56

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • GolangWeb项目异常捕获与日志记录

    答案:通过中间件使用defer和recover捕获panic,结合zap等结构化日志库记录请求链路信息,为每个请求生成trace ID,实现异常捕获与可追踪日志,提升系统稳定性与可观测性。 在Go语言Web项目中,异常捕获与日志记录是保障系统稳定性和可维护性的关键环节。Go本身没有像其他语言那样的t…

    2026年5月10日
    000
  • Python官网用户调查的参与方式_Python官网反馈提交详细教程

    答案是通过访问Python官网新闻页面、邮件邀请链接或GitHub仓库提交反馈。具体为:访问官网查找用户调查公告,或点击邮件中的专属链接参与,在GitHub的cpython仓库提交技术建议,并注意如实填写问卷与保护隐私。 如果您希望参与Python官网的用户调查并提交反馈,可以通过官方指定的渠道完成…

    2026年5月10日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2026年5月10日
    000
  • 深入理解 Laravel Session::put:避免常见陷阱与实现表单限流

    本文旨在深入探讨 laravel 框架中 `session::put` 方法的正确用法及其常见误区。针对用户在实现表单提交限流时遇到的问题,详细阐述了 `session::put` 必须提供键值对的原理,并提供了如何在控制器中利用会话机制有效防止重复提交的实战代码示例。通过本文,读者将掌握 lara…

    2026年5月10日
    000
  • Voyager 中关联关系的翻译问题解决方案

    本文档旨在解决在使用 TCGVoyager 管理后台时,关联模型无法正确翻译的问题。主要针对 Laravel 项目中,使用 Voyager 1.4 版本以及 Laravel 8.0 版本,并且已经配置多语言支持的情况下,如何确保关联关系中的可翻译字段能够根据当前应用语言环境进行正确翻译。通过修改 B…

    2026年5月10日
    000
  • 如何在不暴露密钥的情况下,在客户端创建 Stripe Payment Link

    本文介绍了在纯静态网站环境下,如何利用 Stripe Payment Link 实现商品售卖,并着重讨论了在不暴露 Stripe 密钥的前提下,客户端创建 Payment Link 的可行性。分析了直接在客户端使用密钥的风险,并提出了预先生成 Payment Link 或使用后端服务动态生成 Pay…

    2026年5月10日
    000
  • 解决Go语言中GOPATH未设置错误及工作区配置指南

    本文旨在解决go语言开发中常见的“gopath not set”错误,并提供详细的go工作区配置指南。内容涵盖`gopath`环境变量的设置、go项目目录结构、`path`变量的扩展,以及一些高级配置技巧,旨在帮助开发者建立一个高效、规范的go开发环境,确保包的下载、编译和运行顺利进行。 Go语言在…

    2026年5月10日
    000
  • Golang使用assert库简化测试断言

    使用testify/assert库可提升Go测试代码的可读性和效率,通过go get github.com/stretchr/testify/assert安装后导入包,用assert.Equal等函数替代冗长的手动判断,支持丰富断言方法如Equal、True、Nil、Contains等,并可添加自定…

    2026年5月10日
    100
  • 如何处理在线编辑HTML时外部链接验证的处理方法

    在线编辑HTML时需验证外部链接以保障安全与可用性,可通过自动检测标记外链并添加rel属性提升安全性;2. 实时验证链接有效性,利用HEAD请求检查状态码并在编辑界面提示结果;3. 配置可信域名白名单控制高风险链接输入,适用于合规要求高的场景;4. 提供友好反馈机制,对无效或可疑链接弹出提示并支持新…

    2026年5月10日
    000
  • 优化 Laravel Eloquent 查询:高效构建用户排行榜数据

    本教程详细讲解如何优化 Laravel Eloquent 查询以高效生成基于关联记录计数的排行榜。通过识别并消除冗余的 whereHas 子句,并巧妙利用 withCount 的条件闭包,我们能显著提升查询性能,大幅缩短数据获取时间,从而改善用户体验并降低数据库负载。 在 laravel 应用开发中…

    2026年5月10日
    000
  • 如何通过GitHub API高效获取超过100个用户列表(分页教程)

    本教程旨在解决使用GitHub API获取用户列表时遇到的默认100个用户限制问题。我们将详细介绍两种主要的分页策略:利用Octokit库内置的paginate方法实现自动化分页,以及手动实现基于since参数的循环分页逻辑。文章将提供清晰的代码示例,并强调在不同场景下选择合适方法的注意事项,特别是…

    2026年5月10日
    100
  • 告别重复:使用Laravel Precognition统一前后端API验证

    本文旨在解决在Laravel后端与前端API交互中,如何高效复用后端验证规则的挑战。传统方案常限于表单元素,难以覆盖所有API请求。通过引入Laravel Precognition,开发者能够实现后端验证逻辑在前端的无缝应用,避免规则重复编写,从而提升开发效率与代码一致性,确保所有API请求的数据完…

    2026年5月10日
    200
  • 实时加密深度分析平台盘点?3款开源数据源

    CryptoWatch开源接口提供高频更新的全球交易所深度数据,支持多语言调用与可视化渲染;2. TradingView开源脚本集成Pine Script模板,可自定义订单簿深度分析并设置买卖压力警报;3. OpenBB Terminal支持本地部署,结合命令行拉取加密资产深度数据,实现技术指标叠加…

    2026年5月10日
    000
  • Laravel Session::put 正确用法详解与常见误区规避

    本文详细探讨了 laravel 中 `session::put` 方法的正确用法,特别指出在仅提供键名而未指定值时可能导致会话数据未被正确设置的问题。通过示例代码,阐述了如何为会话数据赋予明确的值,并演示了如何正确地检查和获取会话数据,以确保会话管理功能按预期工作,有效避免常见的会话操作错误。 La…

    2026年5月10日
    000
  • Go应用中基于gorilla/mux的模块化路由管理策略

    本文探讨了在go应用中使用`gorilla/mux`实现模块化路由的有效策略。针对大型应用中路由配置日益复杂的问题,我们提出了一种去中心化的解决方案:通过在各个模块的`init()`函数中注册其专属路由到全局路由表,`main`函数统一加载,从而实现路由的清晰分离与高效管理,提升代码可维护性。 在构…

    2026年5月10日
    000
  • Go 版本升级后依赖编译错误解决方案

    本文旨在解决 Go 语言版本升级(如从 1.1.1 到 1.1.2)后,由于依赖包编译缓存导致的项目编译错误。我们将深入探讨错误原因,并提供包括 `go clean -i` 和 `go install -a` 在内的有效清理和重建策略,确保您的 Go 项目在升级后能顺利编译运行。同时,文章也将强调 …

    2026年5月10日
    000
  • C++怎么用Bazel构建大型项目_C++可复现、可扩展的构建系统Google Bazel入门

    答案:Bazel通过声明式BUILD文件实现C++项目的高效构建,1. 使用Bazelisk安装并初始化项目创建WORKSPACE文件 2. 编写cc_binary规则构建主程序 3. 用cc_library拆分模块并通过deps依赖实现复用 4. 配置远程缓存、沙箱和工具链提升性能与可复现性。 构…

    2026年5月10日
    000
  • PHP中批量为嵌套数组元素添加公共属性的教程

    本教程将详细介绍在php中如何高效地为包含多个关联数组的集合中的每个子数组添加一个或多个新的公共键值对。我们将探讨使用循环和数组合并函数实现这一目标的方法,并提供清晰的代码示例,帮助开发者处理此类数据结构转换。 在PHP开发中,我们经常会遇到处理复杂数据结构的需求,其中一种常见场景是拥有一个由多个关…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信