wake-up-neo.com

Route [password.reset] nicht in Laravel 5.4 in ResetPasswords.php definiert

Ich erhalte diesen Fehler in meiner benutzerdefinierten App:

InvalidArgumentException in UrlGenerator.php line 304: 
Route [password.reset] not defined.

Ich weiß, dass Laravel eine Funktion zum Zurücksetzen des Kennworts bereitstellt, aber ich möchte meine eigene Klasse und Routen schreiben.

Hier sind meine Routen in web.php

// Password reset link request routes...
Route::get('password/email', 'Auth\[email protected]');
Route::post('password/email', 'Auth\[email protected]');

// Password reset routes...
Route::get('password/reset/{token}', 'Auth\[email protected]');
Route::post('password/reset', 'Auth\[email protected]');

Und das ist mein PasswordController:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller {



    use ResetsPasswords;

    /**
     * Create a new password controller instance.
     *
     * @param  \Illuminate\Contracts\Auth\Guard  $auth
     * @param  \Illuminate\Contracts\Auth\PasswordBroker  $passwords
     * @return void
     */
    public function __construct(Guard $auth, PasswordBroker $passwords)
    {
        $this->auth = $auth;
        $this->passwords = $passwords;
        $this->middleware('guest');
    }
}

Dies ist mein ResetPasswords.php-Merkmal:

namespace Illuminate\Foundation\Auth;

use Illuminate\Http\Request;
use Illuminate\Mail\Message;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Password;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

trait ResetsPasswords
{
    use RedirectsUsers;

    /**
     * Display the form to request a password reset link.
     *
     * @return \Illuminate\Http\Response
     */
    public function getResetEmail()
    {
        return view('public.auth.password');
    }

    /**
     * Send a reset link to the given user.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function postResetEmail(Request $request)
    {
        $this->validate($request, ['email' => 'required|email']);

        $response = Password::sendResetLink($request->only('email'), 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)]);
        }
    }

    /**
     * Get the e-mail subject line to be used for the reset link email.
     *
     * @return string
     */
    protected function getEmailSubject()
    {
        return property_exists($this, 'subject') ? $this->subject : 'Your Password Reset Link';
    }

    /**
     * Display the password reset view for the given token.
     *
     * @param  string  $token
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function getReset($token = null)
    {
        if (is_null($token)) {
            throw new NotFoundHttpException;
        }

        return view('public.auth.reset')->with('token', $token);
    }

    /**
     * Reset the given user's password.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function postReset(Request $request)
    {
        $this->validate($request, [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:6',
        ]);

        $credentials = $request->only(
            'email', 'password', 'password_confirmation', 'token'
        );

        $response = Password::reset($credentials, function ($user, $password) {
            $this->resetPassword($user, $password);
        });

        switch ($response) {
            case Password::PASSWORD_RESET:
                return redirect($this->redirectPath())->with('status', trans($response));

            default:
                return redirect()->back()
                            ->withInput($request->only('email'))
                            ->withErrors(['email' => trans($response)]);
        }
    }

    /**
     * Reset the given user's password.
     *
     * @param  \Illuminate\Contracts\Auth\CanResetPassword  $user
     * @param  string  $password
     * @return void
     */
    protected function resetPassword($user, $password)
    {
        $user->password = bcrypt($password);

        $user->save();

        Auth::login($user);
    }
}

Das Problem ist, wenn ich die Schaltfläche zum Zurücksetzen des Kennworts drücke, führt dies zu diesem Fehler. Ich weiß nicht, was das Problem ist, aber es scheint, dass Phpstorm die Password :: sendResetLink-Methode in der PasswordBroker-Klasse nicht erkennt und die Methode mit gelber Farbe hervorhebt.

Method sendResetLink not found in Illuminate\Support\Facades\Password
Refreced method is not found in subject class

Ich weiß nicht, welche Beziehung zwischen dieser Methode und den Routen besteht.

Jede Hilfe wäre dankbar ...

8
Salar Bahador

In laravel 5.4 sendResetLink hat nur ein Parameter credentials 

Sie müssen also Ihre Methodenimplementierung dahingehend ändern:

$response = $this->passwords->sendResetLink($request->only('email'));

Dann musst du Callback auf User model setzen (oder was genau du hast) das hat 

trait CanResetPassword

Dieses Modell muss eine Methode haben:

public function sendPasswordResetNotification($token) {
    // do your callback here
}
5
Alex Slipknot

diese Routen brauchen einen Namen.

Hier der Code ..

// Password reset link request routes...
Route::get('password/email', 'Auth\[email protected]')->name('password.email');
Route::post('password/email', 'Auth\[email protected]');

// Password reset routes...
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.request');
Route::post('password/reset', 'Auth\[email protected]')->name('password.reset');
10
a3rxander

Route

{{ route('password.email') }}

gibt /password/reset/{token} zurück

und Route

{{ route('password.request') }}

gibt /password/reset zurück

Wer das geschrieben hat, muss an diesem Abend wirklich müde gewesen sein, aber ich denke, es ist zu spät, um den Rahmen an diesem Punkt zu ändern

2
Arthur Tarasov

Wenn Ihr Reset-Link localhost für die URL enthält, denken Sie daran, die APP_URL der .env-Datei zu ändern, und führen Sie dann Folgendes aus:

0
JavierE