Bonjour,

Je cherche à enregistrer la date de dernière consultation du site des utilisateurs.

Tout bêtement je pensais qu'en mettant mon petit bout de code dans le constructeur de Controller.php ca me ferait le boulot, mais à ce niveau là, auth()->user()est null

Si quelqu'un a la solution, merci :)

7 réponses


Bonjour lolotoobo,

J'apellle Auth au niveau de mon layout principal de la manière suivante:
$user = \Auth::user(); ou Auth::user;
Puis j'ai accès en permanence aux données de la table users récupérées par la méthode appellée quelque soit la page renvoyée à conditon que cette page hérite du layout avec l'instruction @extends('layout').
Exemple: $user->updated_at;

J'ai essayé au niveau d'un controller et à priori cela fonctionne de la même mnière, sauf que je dois l'appeler à chaque fois que je veux la récupérer sur une page spécifique.

Je suis toujours sur la version 5.2, mas je pense que cela fonctionne avec les autres versions du famework.

J'espère avoir répondu à ta question

Alain

Peut-on voir le code du controller ?

@alain9034 : désolé de ne t'avoir répondu. On peut faire comme ça oui :)

@rueduphp : Maintenant pour ce genre d'opérations, je passe par un observer sur User, c'est très pratique :) Et ça allège un peu le code des controlleurs.

Sinon tu rajoutes le constructeur dans Controller.php

protected $user;

public function __construct()
{
    $this->middleware(function ($request, $next) {
        $this->user = auth()->user();
        $this->user->update([
            'last_login_at' => Carbon::now(),
            'last_login_ip' => \Request::ip()
        ]);

        return $next($request);
    });
}

Ton code devrait marcher vu que tu fais bien un callback dans le constructeur de Controller.

Par contre, je te conseille de passer par une classe middleware (exemple : UpdateLastLogin) plutôt qu'un callback dans le constructeur de Controller.

Oui ce code marche c'est la solution que j'ai trouvé

Oui j'aurais pu passer par un middleware, mais je n'ai utilisé cette technique que pour un seul projet :) mais merci de l'idée ca pourra me reservir

Mon comm' peut paraître sévère à la relecture mais il faut le prendre cool ^^

@joshow : Ne t'inquiète pas, c'est moi qui ait dû etre trop rapide dans ma réponse :) Je ne l'ai pas mal pris, bien au contraire car tu as raison pour faire du boulot propre on pourrait passer par un middleware, mais le projet ayant été rendu avec une méthode qui marche je n'y touche pas pour le moment hihihi

Et comme j'avais précisé plus haut maintenant pour ce genre de chose, je passe par des observers, je trouve ça tellement sympa et ca rend le code beaucoup plus "propre"