Аутентификация с вложенным документом коллекции в laravel mongodb - PullRequest
0 голосов
/ 13 февраля 2020

Я использую jenssegers / laravel -mongodb для моего laravel приложения.

И я хочу войти в свой проект. Итак, у меня есть коллекция entities. Моя коллекция entities выглядит следующим образом:

{
"_id" : ObjectId("5e42938b140af6052038f274"),
"designation" : "Skills",
"type" : "affiliate",
"contact" : [ 
    {
        "firstname" : "Vino",
        "lastname" : "Neha",
        "email" : "vinothini@gmail.com",
        "password" : "$2y$10$jnoXRxW4jkB76aXGY84faukJdo6zmZngot8AscYP8OYGr4u8m55Fa"
    }, 
    {
        "firstname" : "Astha",
        "lastname" : "Goswami",
        "email" : "astha@gmail.com",
        "password" : "$2y$10$Kr0VlDWRnRYKINs.f0GgWup7VRF3jEIRXgZytvUbij8n6G1g45i0."
    }
]

}

Я использую модель для коллекции entities, и я хочу использовать эту модель и для входа в систему. Вот как выглядит моя Entity модель:

<?php

  namespace App\Models;

  use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
  use Laravel\Passport\HasApiTokens;
  use Jenssegers\Mongodb\Auth\User as Authenticatable;

  class Entity extends Authenticatable
  {
       use HasApiTokens;

       public function contacts() {
            return $this->embedsMany('Contact'); // To get subdocument "contact"
       }

       /**
        * For authentication take email column from contact subdocument 
        *
        * @return string|null
        */
       public function getEmailAttribute() {
            return $this->contacts->getAttribute('email');
       }

       /**
        * For authentication take password column from contact subdocument 
        *
        * @return string|null
        */
        public function getPasswordAttribute() {
            return $this->contacts->getAttribute('password');
        }
    }

Здесь я пытаюсь выполнить вход с помощью:

Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password])

Ниже мой файл auth.php:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'entity',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'entity',
    ],
],
'providers' => [
    'entity' => [
        'driver' => 'eloquent',
        'model' => App\Models\Entity::class,
        'hash' => false,
    ],
],

Этот проект предназначен только для API. Так что я использую паспорт здесь.

Я хочу проверить электронную почту и пароль с поддокументом. Я говорю модели взять пароль и электронную почту из вложенного документа, упомянув getPasswordAttribute и getEmailAttribute в моей модели.

И я использую функцию contacts() в моей модели, чтобы получить значение из вложенного документа.

Моя проблема в том, что я не могу войти. Результат всегда ложная форма Auth::attempt.

Понятия не имею, как это сделать. Пожалуйста, помогите ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...