如何在 Laravel 5.2 中手动发送密码重置请求?
Posted
技术标签:
【中文标题】如何在 Laravel 5.2 中手动发送密码重置请求?【英文标题】:How do I manually send a password reset request in Laravel 5.2? 【发布时间】:2016-12-18 17:56:29 【问题描述】:我想从控制器内手动向特定用户(不是当前登录的用户)发送密码重置请求。我在 Laravel 代码中进行了一些挖掘,似乎我应该在 ResetsPasswords
中调用 postEmail(Request $request)
,但我似乎无法弄清楚如何访问正确的 PasswordController
实例来调用它。
【问题讨论】:
您是否尝试过通过在控制器中执行use ResetsPasswords;
来包含该特征,然后从该特征调用相关方法?
@Jonathon 是的。我用过use ResetsPasswords;
和$this->postEmail($request);
。没有输出;既没有错误也没有成功,但我从未收到过电子邮件。
更新你的 auth.php 配置文件驱动
【参考方案1】:
为什么不给你的控制器做这样的事情:
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Password;
class YourController extends Controller
public function sendEmail()
$credentials = ['email' => $email_address];
$response = Password::sendResetLink($credentials, function (Message $message)
$message->subject($this->getEmailSubject());
);
switch ($response)
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
你并没有真正解释你想如何发送这个的上下文,所以相应地调整。
【讨论】:
谢谢 - 这让我走上了正轨!我刚刚编辑了帖子以明确 sendResetLink 的第一个参数应该是['email' => $email_address]
形式的数组
太棒了,很高兴听到!
你救了我的命,伙计!
我遇到了一些错误。 “路由 [password.reset] 未定义”。
效果很好。【参考方案2】:
感谢 Mariusz Kurman,我只在他的回答中添加了令牌。这很好用:
$user = User::where('email', request()->input('email'))->first();
$token = Password::getRepository()->create($user);
$user->sendPasswordResetNotification($token);
【讨论】:
【参考方案3】:完全控制 Laravel 5.5:
$user = User::where('email', request()->input('email'))->first();
$token = Password::getRepository()->create($user);
Mail::send(['text' => 'emails.password'], ['token' => $token], function (Message $message) use ($user)
$message->subject(config('app.name') . ' Password Reset Link');
$message->to($user->email);
);
【讨论】:
为密码干杯::getRepository()->create();此外,这也适用于 5.4。 与@SuperNOVA 相同:谢谢,它也适用于 5.8。 这里是链接href
放入邮件中: route('nova.password.reset', ['token' => $token ])
@kjdion84 为什么是Password::getRepository()->create($user)
而不仅仅是Password::createToken($user)
- 见src github.com/laravel/framework/blob/5.4/src/Illuminate/Auth/…【参考方案4】:
最简单的方法:
$token = Str::random(60);
$user = User::where('email', request()->input('email'))->first();
$user->sendPasswordResetNotification($token);
@Doc's bottom
如果您想手动编辑您的电子邮件:
php artisan vendor:publish
选择“11” 给你:
/resources/views/vendor/notifications/email.blade.php
【讨论】:
您正在使用未在任何地方定义的“$token”变量。【参考方案5】:使用此代码发送密码重置链接。这里我是 API 路由。
$this->validate($request, [
'user_id' => 'required|int',
]);
$user = User::find($request->user_id);
if( $user )
$credentials = ['email' => $user->email];
$response = Password::sendResetLink($credentials, function (Message $message)
$message->subject($this->getEmailSubject());
);
switch ($response)
case Password::RESET_LINK_SENT:
return response()->json([
'status' => 'success',
'message' => 'Password reset link send into mail.',
'data' =>''], 201);
case Password::INVALID_USER:
return response()->json([
'status' => 'failed',
'message' => 'Unable to send password reset link.'
], 401);
return response()->json([
'status' => 'failed',
'message' => 'user detail not found!'
], 401);
对于网页视图:
$response = Password::sendResetLink($credentials, function (Message $message)
$message->subject($this->getEmailSubject());
);
switch ($response)
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
【讨论】:
以上是关于如何在 Laravel 5.2 中手动发送密码重置请求?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 手动生成重置密码令牌:收到错误“此密码重置令牌无效”
如何使用 laravel 5 中的队列通过电子邮件发送密码重置链接