【问题标题】:How do I manually send a password reset request in Laravel 5.2?如何在 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 配置文件驱动

标签: php laravel email passwords


【解决方案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' =&gt; $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' =&gt; $token ]) }}
    • @kjdion84 为什么是Password::getRepository()-&gt;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)]);
            }
    

    【讨论】:

      猜你喜欢
      • 2019-08-22
      • 2020-04-25
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 2016-06-19
      • 2019-07-25
      相关资源
      最近更新 更多