我正在开发一个用于用户管理的微服务,它将被以下方式使用:
其他微服务
一个SPA应用程序
本机应用
它需要:
验证用户
授权用户
管理oauth令牌
管理注册/登录/注销/重置密码/忘记密码
它将是一个纯REST API(没有形式) .
到目前为止,我有:
安装/配置了Laravel护照和Passport :: Routes()
配置了密码授予客户端
这两个组合允许我点击 oauth/token endpoints 以获得有效的JWT令牌,并使用它成功地通过"auth:api"认证调用 api/user .
对于我的下一个技巧,我需要配置上面的所有用户管理 endpoints (注册/忘记密码/等),我试图找出最好的方法来做到这一点 . 我试图避免使用第三方mod的Laravel(dingo,esbenp / larapi等),除非我必须这样做 .
这意味着需要实现 Auth::routes() 和 Passport::routes() . Passport::routes() 似乎完全没问题 . 但 Auth::routes() 不是为REST API设计的 .
我现在的想法是,在不重新发明轮子的情况下实现标准用户管理功能的最佳方法是重新实现 App\Http\Controllers\Auth 命名空间中控制器所消耗的特性 . 这些是:
Illuminate \ Foundation \ Auth \ AuthenticatesUsers
Illuminate \ Foundation \ Auth \ RedirectsUsers
Illuminate \ Foundation \ Auth \ RegistersUsers
Illuminate \ Foundation \ Auth \ ResetsPasswords
Illuminate \ Foundation \ Auth \ ThrottlesLogins
Illuminate \ Foundation \ Auth \ SendsPasswordResetEmails
而且由于php traits的工作方式,这可以有选择地完成,只需重新实现必要的功能,如下所示:
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails, MySendsPasswordResetEmails
{
// REPLACE THE HTML FORM WITH A JSON PLACEHOLDER
MySendsPasswordResetEmails::showLinkRequestForm insteadof SendsPasswordResetEmails;
// REPLACE THE HTML RESPONSE WITH A JSON RESPONSE
MySendsPasswordResetEmails::sendResetLinkResponse insteadof SendsPasswordResetEmails;
}
}
它仍然完全可怕,但它似乎是避免重复代码的最佳方法 . 我想知道:
这是一个好主意
如果有人对如何做到这一点有任何建议
如果有任何关于修改auth特征的文档
理想情况下,如果有人以前做过吗?
tbh,我甚至没有开始考虑授权部分,但我认为这将在认证之上 .
谢谢!