Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel 5.2中手动发送密码重置请求?_Php_Laravel_Email_Passwords - Fatal编程技术网

Php 如何在Laravel 5.2中手动发送密码重置请求?

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

我想从控制器中手动向特定用户(不是当前登录的用户)发送密码重置请求。我在Laravel代码中做了一些挖掘,似乎我应该在
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”变量。