这不是一个需要答案的问题,但欢迎进一步的建议、答案和建议。我想与世界分享我是如何解决这个问题的,并希望它能帮助其他人。
Laravel提供了几种预先设计的身份验证解决方案,您可以使用一些Artisan命令来启动这些解决方案。
- 标准用户表验证
- OAuth2(通过Laravel Passport包)
- 基于社交媒体的身份验证(通过Laravel Socialite软件包)
尽管所有这些都很有用,但在这个微服务的时代,Laravel并没有为使用自定义API的仅API身份验证提供太多现成的引导程序。
几个月前,我就遇到了这个问题,我搜索了谷歌和Stackoverflow寻找答案。我找到了一些有用的文章,它们帮助我指明了方向,这些文章都被引用了。我花了一些精力来理解如何将它们粘合在一起,并进行分步调试来解决问题。
提供答案是希望它能帮助其他人--和我自己,在那里我必须在未来再次做同样的事情。
假设和范围:
- 您已经创建了自己的API,如https://example.com/login和https://example.com/logout
- 您运行的网站需要身份验证,但不需要通过模型和表或社交媒体进行身份验证
- 您的API管理与表的交互,包括用户登录/注销
- 您使用Laravel Passport插件进行OAuth2身份验证(感谢@ShuvoJoseph提醒我注意此问题)
2条答案
按热度按时间u1ehiz5o1#
该解决方案涉及七个PHP文件
源研究/调查材料被引用给你自己调查和理解他们存在的背景上下文。我不声称是一个天才谁创造了解决方案从零开始通过我自己的魔力,而是-像所有的创新者-我建立在别人的努力。我的文章的独特卖点是,我提供了一个完整的打包解决方案,而引用的来源提供了整体答案中利基部分的解决方案。一起,经过多次反复试验,它们帮助我形成了一个完整的解决方案。
要了解config/auth.php如何影响AuthManager.php中的执行,一篇真正有用的文章是https://www.2hatslogic.com/blog/laravel-custom-authentication/
未对以下内容进行代码修改,但将其包括在内是为了确认它们在过程中所扮演的角色及其重要性:
代码
应用程序/HTTP/控制器/家庭控制器. php
应用程序/提供程序/ApiUserProvider. php
资料来源:
应用程序/核心扩展/会话保护扩展. php
资料来源:
应用程序/Api用户
资料来源:
应用程序/提供程序/验证服务提供程序. php
应用程序/提供程序/应用程序服务提供程序. php
资料来源:
注意事项:
关于这个PHP文件中的代码更改,有一些细微的问题。如果你想了解更多,请查看vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php,特别是AuthManager::resolve()。
1.对config/auth.php 'session'和'token'的引用由硬编码方法AuthManager::createSessionDriver()和AuthManager::createTokenDriver()提供(请告诉我您是否知道在应用程序中扩展AuthManager.php的方法)
1.我同意上面的第2点,但是我们能不能做一些聪明的事情,比如从AppServiceProvider返回自定义会话保护名称或示例,在AuthManager.php中的一个专门的公共方法中设置setCookieJar()、setDispatcher()、setRequest(),在AuthManager.php中创建自定义会话保护之后,可以将其挂接到AppServiceProvider.php中或由config/auth.php驱动执行?
1.如果没有cookie或会话,用户的身份将无法通过重定向保留。解决此问题的唯一方法是在我们当前的解决方案中的AppServiceProvider中包含setCookieJar()、setDispatcher()和setRequest()。
配置/验证. php
资料来源:
如何使用此解决方案
非常简单,整个方法没有变化,换句话说,我们使用Auth()外观。
使用自定义API
/login?username=<username>&password=<password>
登录时使用自定义API
/logout
注销时nukf8bse2#
这种方法的问题是它不能处理密码重置,密码重置要求将令牌存储在本地数据库中,覆盖起来很麻烦。