Php 如何在Laravel 5.2中手动发送密码重置请求?
我想从控制器中手动向特定用户(不是当前登录的用户)发送密码重置请求。我在Laravel代码中做了一些挖掘,似乎我应该在Php 如何在Laravel 5.2中手动发送密码重置请求?,php,laravel,email,passwords,Php,Laravel,Email,Passwords,我想从控制器中手动向特定用户(不是当前登录的用户)发送密码重置请求。我在Laravel代码中做了一些挖掘,似乎我应该在ResetsPasswords中调用postmail(Request$Request),但我似乎不知道如何访问正确的PasswordController实例来调用它。为什么不为您的控制器做这样的事情: <?php namespace Illuminate\Foundation\Auth; use Illuminate\Http\Request; use Illumina
ResetsPasswords
中调用postmail(Request$Request)
,但我似乎不知道如何访问正确的PasswordController
实例来调用它。为什么不为您的控制器做这样的事情:
<?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)]);
}
}
}
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);
});
最简单的方法:
$token = Str::random(60);
$user = User::where('email', request()->input('email'))->first();
$user->sendPasswordResetNotification($token);
如果您想手动编辑电子邮件:
php artisan vendor:publish
选择“11”
给你:
/resources/views/vendor/notifications/email.blade.php
多亏了Mariusz Kurman,我才在他的回答中添加了一个记号。这很好:
$user = User::where('email', request()->input('email'))->first();
$token = Password::getRepository()->create($user);
$user->sendPasswordResetNotification($token);
将此代码用于发送密码重置链接。我在这里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);
对于Web视图:
$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)]);
}
你是否尝试过通过使用ResetsPasswords
来包含该特征代码>在你的控制器内,然后从trait调用相关方法?@Jonathon Yes。我使用了使用ResetsPasswords
和$this->postmail($request)代码>。没有产出;既没有错误也没有成功,但我从未收到电子邮件。更新您的auth.php配置文件drivertanks-这让我走上了正确的轨道!我刚刚编辑了这篇文章,以明确sendResetLink的第一个参数应该是一个数组,其形式为['email'=>$email\u address]
真棒,很高兴听到!你救了我一天,伙计!我犯了一些错误。“路由[password.reset]未定义”。效果非常好。为密码欢呼::getRepository()->create();同样,这也适用于5.4版本。与@SuperNOVA:Thank相同,它也适用于5.8版本。下面是要放在邮件中的链接:{route('nova.password.reset',['token'=>$token])}
@kjdion84为什么密码::getRepository()->创建($user)
而不仅仅是密码::创建令牌($user)
-请参阅src,您正在使用未在任何地方定义的“$token”变量。