如何使用Laravel/Sanctum在SPA应用程序中实现ForgotPasswordController?
我用的是Laravel7.x和sanctum。登录正常,我想从SPA应用程序中创建一个忘记密码选项 由于文档中的大多数示例都依赖于auth脚手架,因此我正在努力学习基础知识。到目前为止,我已成功获得以下信息:如何使用Laravel/Sanctum在SPA应用程序中实现ForgotPasswordController?,laravel,laravel-7,laravel-sanctum,Laravel,Laravel 7,Laravel Sanctum,我用的是Laravel7.x和sanctum。登录正常,我想从SPA应用程序中创建一个忘记密码选项 由于文档中的大多数示例都依赖于auth脚手架,因此我正在努力学习基础知识。到目前为止,我已成功获得以下信息: const crypto = require('crypto') crypto.randomBytes(20, (err, buffer) => { var token = buffer.toString('hex') console.log(token)
const crypto = require('crypto')
crypto.randomBytes(20, (err, buffer) => {
var token = buffer.toString('hex')
console.log(token)
let url = 'password/email'
axios.post(url, {
token: token,
email: this.resetEmail
})
.then((res) => {
console.log(res)
}, (err) => {
this.has_error = true
let errorResp = err.response.data
if (errorResp.errors.email) {
console.log(errorResp.errors.email[0])
}
})
})
- 我有一个名为
的控制器类,它有一个名为ForgotPasswordController
的方法,通过POST接收要重置的电子邮件reset
- 我已经创建了一个对象:
$user=user::where('email',$email)->get()->first()代码>
Illuminat\Auth\Password
名称空间中看到了一些额外的类。我的目标是创建一个过期令牌,通过默认的电子邮件配置将其发送给用户(我知道如何发送电子邮件/设计模板),然后能够进行webservice调用,从而允许解析密码
这是我想我知道的。。。
- 我在我的用户模型上设置了
trait,我认为这是支持本机密码重置方法所必需的CanResetPassword
- 我相信目标是针对一段时间后过期的用户电子邮件创建一个重置令牌,然后将该令牌附加到电子邮件中的url中发送(我不知道围绕表行之外的令牌生成的架构含义)
- 有一个
facade和一个Password
方法,但是 方法无法用于spa应用程序,因为 客户端应用程序将是不同的,所以我假设必须重新编写一些本机应用程序。事实上,调用此方法将返回一个错误sendResetLink
Route[password.reset]not defined
laravel/ui
的包中
通过安装该软件包,您可以使用Laravel身份验证。它将负责您的注册、登录和忘记密码过程
这个软件包将为所有这些进程创建一些控制器,您需要这些控制器
:将生成并发送重置密码链接放弃密码控制器
:将通过获取用户的电子邮件、新密码和重置密码令牌来重置密码ResetPasswordController
email
和token
)$email = 'user@email.com';
$token = \Illuminate\Support\Str::random(10);
while(\DB::table('reset_password_tokens')->where('token', $token)->exists()) {
$token = \Illuminate\Support\Str::random(10);
}
\DB::table('reset_password_tokens')->insert(compact('email', 'token'));
要在使用SPA时生成令牌,请执行以下操作:
const crypto = require('crypto')
crypto.randomBytes(20, (err, buffer) => {
var token = buffer.toString('hex')
console.log(token)
let url = 'password/email'
axios.post(url, {
token: token,
email: this.resetEmail
})
.then((res) => {
console.log(res)
}, (err) => {
this.has_error = true
let errorResp = err.response.data
if (errorResp.errors.email) {
console.log(errorResp.errors.email[0])
}
})
})
这是我确定的方法,我不确定如何通过Laravel体系结构生成实际的令牌,如果你知道的话,你能在你的答案中包含这一点吗?@Shane我更新了我的答案并添加了一段代码。我希望它对你有用。