Аргумент 1, переданный в Illuminate\Auth\Guard::login(), должен быть экземпляром ошибки Illuminate\Contracts\Auth\Authenticable в laravel 5

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

Когда я пытаюсь создать его с полем checkt, я получаю эту ошибку:

Аргумент 1, передаваемый в Illuminate\Auth\Guard::login(), должен быть экземпляром Illuminate\Contracts\Auth\Authenticable, экземпляром App\Cars, который вызывается в /home/vagrant/Code/carpool-app-going-your -way/www/vendor/compiled.php в строке 2078 и определено

Любые идеи о том, как это исправить?

Вот мой код:

registrar.php

public function create(array $data)
{
    if (isset($_POST["ihaveacar"])){

        return Cars::create([
            'seats'=>$data['seats'],
            'seats_taken'=>'0',


        ]);



    }

    return User::create([
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'screen_name' => $data['screen_name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'route' => $data['route'],
        'state' => $data['state'],
        'description' => $data['description'],
        'license_since' => $data['license_since'],
    ]);

}

User.php

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\SoftDeletes;



class User extends model implements AuthenticatableContract, CanResetPasswordContract{

    use Authenticatable, CanResetPassword;


    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['first_name', 'last_name', 'screen_name', 'email', 'password', 'birthday', 'license_since', 'kilometers', 'state', 'route','image','description','soft_delete', 'is_admin'];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = ['password', 'remember_token'];



    use SoftDeletes;
    protected $dates = ['deletec_at', 'created_at', 'updated_at'];



}

Любые идеи, как это исправить?

заранее спасибо

Изменить: вдруг кажется, что он работает без ошибок. Я не понимаю.


person tiberghien Jeffrey    schedule 15.06.2015    source источник
comment
Вы не должны не использовать суперглобальный $_POST. Вместо этого извлеките данные из экземпляра Request: laravel.com/docs/master/requests#retrieving -вход   -  person Martin Bean    schedule 16.06.2015
comment
экземпляр запроса не работает так хорошо в моем случае, я пытался использовать его, когда пользователь также меняет свой профиль, и он продолжал терпеть неудачу   -  person tiberghien Jeffrey    schedule 16.06.2015


Ответы (3)


Вы передаете экземпляр App\Cars регистратору с помощью метода create(). Удалите из регистратора всю логику, не связанную с входом в систему, и выполняйте указанную логику только после логики проверки подлинности.

person Chukky Nze    schedule 15.06.2015
comment
так что, если я удалю логику, где я должен ее поместить, сразу после создания пользователя в том же файле или в совершенно другом файле вместе? Спасибо за ваш ответ ;) - person tiberghien Jeffrey; 16.06.2015
comment
совсем другой файл. Вы смешиваете аутентификацию в приложении с фактической логикой самого приложения ... это грязно. Будь проще. После аутентификации пользователя перенаправьте его на другой контроллер, который будет обрабатывать все остальное. - person Chukky Nze; 16.06.2015

вы должны расширить Illuminate\Foundation\Auth\User как

use Illuminate\Foundation\Auth\User as AuthUser;
class Member extends AuthUser
{
    public  $table='members';
    protected $fillable = ['name', 'password','qq','phone'];

}
person qqq    schedule 04.08.2017

Вы возвращаете два разных типа объектов в методе create(). Если запрос имеет параметр с именем ihaveacar, вы возвращаете экземпляр Car, в противном случае вы возвращаете экземпляр User. Вам нужно решить, что на самом деле должен возвращать ваш метод create().

person Martin Bean    schedule 16.06.2015
comment
на самом деле он должен сделать и то, и другое, когда я уверен, что хочу создать автомобиль, который будет принадлежать пользователю с помощью FK, чтобы мы позже узнали, какая машина принадлежит этому пользователю и какое у него низкое сиденье в зависимости от приложения carpooll. - person tiberghien Jeffrey; 16.06.2015