0
votes

LoginController n'authentifie pas les utilisateurs

J'étais en train de créer un registre et de me connecter au début, tout se passait bien et une fois que j'ai terminé mon inscription, la connexion ne s'authentifiera pas, cela dit toujours des données invalides, croyez-moi, il y a des données valides qui ne fonctionnent tout simplement pas J'ai essayé de changer les informations d'identification de 'mot de passe' à 'Mot de passe' (même chose pour le nom d'utilisateur), toujours rien n'a fonctionné

LoginController, également avant que vous ne demandiez, je les ai liés avec web.php au formulaire de connexion et je l'ai fait ajoutez @csrf pour le jeton pour que tout fonctionne correctement

namespace App\Http\Controllers;

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

use App\User;

class LoginController extends Controller {
    /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request){

        $username = $request->input('username');
        $password = $request->input('password');

        $credentials = ['username' => $username, 'password' => $password];



        if (Auth::check()) {
            return redirect('/register');
        } else {

            if (Auth::attempt($credentials)) {

                // Authentication passed...
                $request->session()->flash('loginsuccess', 'loginsuccess');
                return redirect('/');
            } else {
                $request->session()->flash('loginfailed', 'loginfailed');
                return redirect('/');
            }
        }
    }
}

Je veux que l'utilisateur soit authentifié une fois qu'il s'est connecté. (P.S Je suis nouveau sur Laravel)


4 commentaires

Cela peut être utile de publier le message d'erreur. Il n'y a pas assez pour continuer à partir de votre question pour vous aider sans un peu plus d'informations.


Faites un dd ($ credentials) et vérifiez s'il contient ce que vous attendez.


Comment enregistrez-vous les informations d'identification des utilisateurs?


"Données non valides" suggère que la validation échoue. Faites-vous une validation ailleurs et pouvez-vous poster un exemple de la charge utile que vous envoyez au contrôleur?


3 Réponses :


0
votes

Il y a deux choses que je voudrais vérifier, le mot de passe est-il crypté après l'enregistrement d'un nouvel utilisateur?

Que se passe-t-il si vous imprimez les informations d'identification?

    return redirect('/home'); // or ('/') depends on your routes

De plus, cette logique n'a pas de sens pour moi:

    if (Auth::check()) {
        return redirect('/register');
    ...

Pourquoi rediriger l'utilisateur s'il est déjà authentifié sur votre application? Vous devriez le rediriger vers la page principale, quelque chose comme ceci:

public function authenticate(Request $request){

    $username = $request->input('username');
    $password = $request->input('password');
    dd($password);
    dd($username);// remove the first dd after your check to see the username output

De plus Laravel fournit un échafaudage d'authentification facile, vous pouvez par exemple créer un nouveau projet laravel new project configurez une base de données et exécutez la commande suivante php artisan make: auth cela vous construira la logique de connexion et d'enregistrement.


1 commentaires

Oui, je hache le mot de passe et j'utilise le module Application / Utilisateur pour les enregistrer dans la base de données, je vais effectuer ce que vous avez énuméré ci-dessus et vous le renvoyer - De plus, les méthodes de redirection inutiles étaient uniquement à des fins de débogage , Je redirigerai un utilisateur vers un tableau de bord accessible uniquement aux utilisateurs authentifiés



0
votes
  1. Vérifiez config / auth.php et assurez-vous d'avoir défini un fournisseur d'utilisateur:
  2. $user = User::create([
        'username' => $input['username'],
        'password'=> Hash::make($input['password']),
    ]);
    
    1. Avez-vous créé un RegisterController personnalisé? Si tel est le cas, assurez-vous qu'il hache les mots de passe de vos utilisateurs lors de la création de leurs modèles:
     /*
        |--------------------------------------------------------------------------
        | User Providers
        |--------------------------------------------------------------------------
        |
        | All authentication drivers have a user provider. This defines how the
        | users are actually retrieved out of your database or other storage
        | mechanisms used by this application to persist your user's data.
        |
        | If you have multiple user tables or models you may configure multiple
        | sources which represent each model / table. These sources may then
        | be assigned to any extra authentication guards you have defined.
        |
        | Supported: "database", "eloquent"
        |
        */
    
        'providers' => [
            'users' => [
                // Make sure these values are correct
                'driver' => 'eloquent',
                'model' => App\Models\User::class,
            ],
    

    Je commencerais par ces deux éléments. Si le problème persiste, vous pouvez également inclure le message d'erreur avec votre question pour aider à localiser le problème.


0 commentaires

0
votes

S'agit-il d'une authentification personnalisée? Si tel est le cas, je soupçonne que vous stockez le mot de passe haché lors de l'enregistrement, mais que vous ne le hachez pas lors de la connexion, cela signifie que les mots de passe ne correspondent pas.

Je vous recommande d'utiliser php artisan make: auth de Laravel si vous ne le faites pas déjà.


0 commentaires