В моем LoginController под Auth я использовал следующие коды:
namespace App\Http\Controllers\Auth;
use App\Model\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Redirect;
use Hash;
use Auth;
use DB;
use App\Model\UserAdmin;
class LoginController extends Controller {
use AuthenticatesUsers;
public function __construct() {
$this->middleware('guest')->except('logout');
}
public function doLogin(Request $request) {
$userdata = array(
'email' => Input::get('email'),
'password' => Input::get('password'),
'status' => '1',
);
if (Auth::guard('admin')->attempt($userdata)) {
return Redirect::intended('/administrator/dashboard')->with('successMessage', 'You have successfully logged in.');
}
}
}
А в UserAdmin (модель) в app / Model выглядит следующим образом:
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Config;
class UserAdmin extends Authenticatable {
protected $table = 'adminusers';
public $timestamps = false;
protected $fillable = ['firstName', 'lastName', 'email', 'company', 'website'];
public function __construct() {
parent::__construct(); // Don't forget this, you'll never know what's being done in the constructor of the parent class you extended
}
}
После отправки данных для входа он показывает мне ошибку:
Type error: Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Model\UserAdmin given, called in /var/www/html/XXXXXX/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 379
@Vishal - я сделал то же самое, что и ссылка, которую вы упомянули выше, но ничего не произошло. I dd ('XX'); после Auth :: guard ('admin') -> попытки ($ userdata), но dd не работает.






Я полагаю, что вам нужно было добавить инструменты \ Illuminate \ Contracts \ Auth \ Authenticatable в определение класса модели UserAdmin.
class UserAdmin extends Model implements
\Illuminate\Contracts\Auth\Authenticatable
Это правильный ответ, который избавит вас от сильной головной боли. Замените extends model на extends Authenticatable, как показано выше.
В Laravel 8 это больше не работает. Вместо этого используйте class UserAdmin extends \Illuminate\Foundation\Auth\User.
Попробуйте запустить 'composer dump-autoload', чтобы проверить "неоднозначное разрешение класса пользователя". Вероятно, у вас есть два класса, определенные как класс пользователя.
Вы должны объявить использование AuthenticableTrait для интерфейса Authenticatable.
Например :
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Auth\Authenticatable as AuthenticableTrait;
use Illuminate\Database\Eloquent\Model;
class Company extends Model implements Authenticatable
{
use AuthenticableTrait;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
Затем в вашем классе модели расширяет AuthenticatesUsers вместо Model.
Вы должны использовать Authenticatable в модели пользователя
Например:
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
//your code
}
Вы должны расширить класс Authenticatable и реализовать JWTSubject в модели пользователя.
Например :
class User extends Authenticatable implements JWTSubject {
Перейдите в свою модель и вместо расширения модели расширьте User
<?php
namespace App;
class Staff extends \Illuminate\Foundation\Auth\User
{
}
Это связано с github.com/Zizaco/entrust/issues/671?