Bonjour à tous,

je rencontre un problem lors de la confirmation du mail en suivant ton TP2 pour la gestion des utilisateurs.
Le lien que je recois sur mailcatcher est bien de type: /confirm/$user->id/$token

Mais j'ai ce message d'erreur: "NotFoundHttpException in RouteCollection.php line 161:"

J'utilise Laravel 5.2.39 (version qui est un peu différente dans la gestion de création des utilisateurs par défaut).

Apres plusieurs debug, je remarque qu'il ne rentre pas dans la fonction 'getConfirm' mais je n'arrive pas à comprendre pourquoi.... si l'un d'entre vous a eu ce problem également!

Merci par avance et bonne journée/soirée! :)

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire
Je cherche a valider la création de compte via le lien que j'envoie par mail.

RegisterUsers.php

<?php

namespace Illuminate\Foundation\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

trait RegistersUsers
{
    use RedirectsUsers;

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function getRegister()
    {
        return $this->showRegistrationForm();
    }

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        if (property_exists($this, 'registerView')) {
            return view($this->registerView);
        }

        return view('auth.register');
    }

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function postRegister(Request $request)
    {
        return $this->register($request);
    }

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $validator = $this->validator($request->all());

        if ($validator->fails()) {
            $this->throwValidationException(
                $request, $validator
            );
        }

        Auth::guard($this->getGuard())->login($this->create($request->all()));

        return redirect('/')->with('success', 'Votre compte a bien été créer, mais vous devez le valider en cliquant sur le mail que vous allez recevoir!');
    }

    /**
     * Get the guard to be used during registration.
     *
     * @return string|null
     */
    protected function getGuard()
    {
        return property_exists($this, 'guard') ? $this->guard : null;
    }
}

AuthRegister.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Mail\Mailer;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct(Mailer $mailer)
    {
//        $this->auth = $auth;
        $this->mailer = $mailer;

        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255|alpha_num|unique:users',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array $data
     * @return User
     */
    protected function create(array $data)
    {
        $token = str_random(60);
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'confirmation_token' => $token,
            'password' => bcrypt($data['password']),
        ]);

        $this->mailer->send(['text' => 'auth.emails.register'], compact('user', 'token'), function ($message) use ($user) {
            $message->to($user->email)->subject('Confirmation de compte');
        });

        return $user;
    }

    public function getConfirm(Request $request, $user_id, $token)
    {
//        dd($user_id);
        $user = User::findOrFail($user_id);
        if ($user->confirmation_token == $token && $user->confirmed == false) {
            $user->confirmation_token = null;
            $user->confirmed = true;
            $user->save();
        } else {
            return redirect('/')->with('error', 'Ce token est invalide!!');
        }
        Auth::guard($this->getGuard())->login($user);
        return redirect('/')->with('success', 'Votre compte a bien été confirmé!');
    }
}

Ce que je veux

Que le lien m'enmene sur la page 'confirm'.

Ce que j'obtiens

NotFoundHttpException in RouteCollection.php line 161:

in RouteCollection.php line 161
at RouteCollection->match(object(Request)) in Router.php line 821
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 49
at Debugbar->handle(object(Request), object(Closure))
at call_user_func_array(array(object(Debugbar), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53

10 réponses


tom49
Réponse acceptée

Ta route est "confirm" et ton controller "getConfirm".

Probleme sur ta route. Elle est bien déclarée, pas de faute ou un middleware qui bloque ?

Ma route me semble juste

Route::get('/', function () {
    return view('welcome');
});

Route::auth();

Route::get('confirm/{user_id}/{token}', [
    'as' => 'confirmation_path',
    'uses' => 'Auth\AuthController@confirm'
]);

Route::get('/home', 'HomeController@index');

J'ai suivit le tuto de @Grafikart, il fait de cette maniere et cela fonctionne. J'ai essayé en changeant le nom de ma route mais j'ai toujours la meme erreur.

EDIT: j'ai refais une install clean, puis un php artisan make:auth puis tout le tuto et cela fonctionne! ^^
Trois jours que j'étais dessus! Merci du temps que tu as pris @tom49

Bonjour/Bonsoir, Bigg-Mike

Je me permets de poster dans ton topic une petit question pour toi, voyant que tu à travaillé sur le TP Laravel Petsy avec aussi une version plus jeune que celle du TP (5.2.31 pour ma part). J'aimerais savoir si tu à finis le TP ?

Je m'excuse aussi de devoir poster mon message ici, ma raison est que je pense que peut être tu recevras un message avertissement de mon post et que cela seras plus rapide pour avoir (si tu le veux bien sur) une aide à mon probléme .

Cordialement,

Nansty.

Bonsoir.

J'aimerais savoir si tu à finis le TP ?

La réponse à cette question est dans son dernier message :

puis tout le tuto et cela fonctionne!

Bonsoir,

Par tuto, je me demandé si il parlais juste du TP 2 ou vraiment de tout le tuto, c'est pour sa.

Après s'il s’avérait que c’était juste une mauvaise lecture de m'a part, je m'en excuse. Mais m'a venus sur sont topic est surtout pour savoir si il serais disponible pour quelque renseignement ou plutôt problème que j'ai rencontré sur ce tuto avec la nouvelle version de Laravel ( sachant que je ne peut le contacter par MP , je dois passez par un topic ou alors s'il le souhaite il y aussi discord).

Crées ton propre sujet si tu as un problème, ce n'est pas parce que tu as un problème sur le même tuto qu'un autre membre que tu dois poster ton problème sur le même sujet que lui.
Surtout qu'en partant de ce que tu dis, tu voudrais que ce soit l'auteur de ce sujet qui t'aide à régler ton problème, alors que comme tu peux le voir, c'est un autre membre qui l'a aidé à régler son problème.
Le but du forum, c"est qu'un membre poste son problème et d'autres membres vont l'aider à solutionner son problème ou tout du moins lui donner des pistes qui vont le lui permettre.

Salut Nansty, je n'ai pas eu le temps de terminer le TP en entier, je parlais seulement de la vidéo.