6
votes

Laravel auth () -> guard () retourne null en utilisant vue js

J'ai un formulaire de connexion dans vue.js. Je dois juste me connecter avec vue.js et laravel. Une fois connecté, l'utilisateur sera redirigé vers un tableau de bord qui est déjà développé avec laravel uniquement. J'essaie de me connecter mais cela ne fonctionne pas et auth () -> guard renvoie null afin que l'utilisateur soit redirigé vers la page de connexion au lieu du tableau de bord. Lorsque j'utilise postman dans ce cas, cela fonctionne bien.

Vue js

$web_vendor_path = config('app.project.vendor_panel_slug');
Route::group(array('prefix'    => $web_vendor_path,
                   'middleware'=> ['vendor_auth_check']), function ()
{
    $route_slug = 'vendor_';
    Route::post('validate_login', ['as'   => $route_slug.'validate', 
                                   'uses' => $module_controller.'validate_login']);
});

Route::group(array('prefix'    => $web_vendor_path,
                   'middleware'=>'auth_vendor'), function () 
use($web_vendor_path)
{
    $route_slug        = 'vendor_';
    $module_controller = "Vendor\DashboardController@";
    Route::get('/dashboard',['as'   => $route_slug.'index', 
                             'uses' => $module_controller.'index']);
});

Laravel - valider la connexion:

public function validate_login(Request $request)
{
    $arr_rules      = array();
    $status         = false;

    $remember_me               = "";
    $arr_rules['phone_number'] = "required";
    $validator = validator::make($request->all(),$arr_rules);
    if($validator->fails()) 
    {
         return response()->json([
                'status' => 'error',
                'msg' => "Mobile number is empty"
         ]);
    }
    $obj_group_vendor  = $this->UsersModel
                         ->where('phone_number',$request->only('phone_number'))
                         ->first();
    if($obj_group_vendor) 
    {
        if($this->auth->attempt(['phone_number' => $request->phone_number,
                                 'role_id'      => 3]))
        {
            return response()->json([
                'status' => 'success',
                'msg' => "You are successfully login to your account."
            ]);
        }
        else
        {
            return response()->json([
                'status' => 'error',
                'msg' => "Invalid login credential."
            ]);
        }
    }
    else
    {
        return response()->json([
            'status' => 'error',
            'msg' => "Invalid login credentials."
        ]);
    }
    return;
}       


11 commentaires

Pourquoi ne pas utiliser le passeport laravel? si vous ne voulez pas utiliser le passeport laravel, utilisez la méthode de connexion par défaut de laravel


@bhavinjr En fait, j'ai déjà fait toutes les fonctionnalités du tableau de bord. Ce n'est que le changement que je dois utiliser vue js


Quelques points à vérifier: 1. Vérifiez si la session est activée. Il est requis avec l'authentification Laravel par défaut. 2. Vérifiez que votre table utilisateur a un champ ID standard ou identifiez le champ $ primaryKey dans votre modèle pour l'ID utilisateur.


pouvez-vous s'il vous plaît montrer votre routeur? aussi, pourriez-vous vérifier quelle est la réponse puis rappel? Merci


@ punk73 J'ai mis à jour ma question. Il renvoie null.


quelle est la valeur de $ module_controller sur les routes validate_login ??


@ punk73 C'est le chemin du fichier du contrôleur - $ module_controller = "Vendor \ AuthController @";


pourriez-vous s'il vous plaît m'expliquer où vous définissez votre session ?? je suis un peu confus avec votre approche


@ punk73 Dans le middleware auth_vendor, j'ai vérifié si l'authentification est définie ou non, puis redirige vers la page de connexion.


@Dbb - Pouvez-vous poster votre demande? Après avoir envoyé le fichier validate_login.


Vous devez envoyer le jeton csrf lorsque vous effectuez une requête POST. Essayez de déboguer votre demande via les outils de développement du navigateur (vous pouvez voir la demande et la sortie)


4 Réponses :


2
votes

Lorsque vous effectuez une requête POST / PATCH / PUT / DELETE depuis le navigateur, vous devez inclure le jeton CSRF de votre page.

<meta name="csrf-token" content="{{ csrf_token() }}">

Et assurez-vous que le CSRF est inclus comme une balise Meta dans toutes vos pages:

this.$http.post('http://localhost/project/admin/vendors/validate_login',{phone_number : this.phone_number},{
  headers: {
    "Access-Control-Allow-Origin": "*",
    "X-CSRF-TOKEN": document.head.querySelector('meta[name="csrf-token"]').content
  }
})
.then((response) =>{
  if(response.data.status == 'success')
  {
    window.location = "http://localhost/project/admin/vendors/dashboard";
  }
}) 


1 commentaires

J'ai désactivé cette route pour qu'elle fonctionne sans jeton csrf. Donc pas besoin de passer le jeton csrf



2
votes

Je viens de cracher quelques idées ici:

  • Essayez de définir l'en-tête 'Content-Type': 'application / x-www-form-urlencoded' pour toutes les requêtes POST.

  • De plus, Access-Control-Allow-Origin est un en-tête qui doit figurer dans la réponse du serveur Web. Ce n'est pas un en-tête que vous devriez envoyer dans votre demande depuis javascript.


0 commentaires

2
votes

Assurez-vous que le middleware Web est activé sur votre fichier de routage dans app/Providers/RouteServiceProvider.php

Vérifiez ensuite dans app / Http / Kernel.php que \ Illuminate \ Session \ Middleware \ StartSession :: class , est ajouté et activé dans $ middlewareGroups ['web']


1 commentaires

Oui, les deux choses sont les mêmes que celles dites par vous mais ne fonctionnent toujours pas.



0
votes

Si vous utilisez un api guard, faites ceci auth () -> guard ('api') .


0 commentaires