问题描述
我正在尝试使用护照认证通行证对laravel进行多重认证。但是它显示每次用于管理员身份验证。我尝试了很多次,但无法进行身份验证。请帮忙。
这是我的管理员班
class Admin extends Authenticatable
{
use Notifiable,HasApiTokens;
protected $guard = 'admin';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name','email','password',];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password','remember_token',];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',];
}
<?PHP
return [
'defaults' => [
'guard' => 'web','passwords' => 'users',],'guards' => [
'web' => [
'driver' => 'session','provider' => 'users','api' => [
'driver' => 'passport','hash' => false,'admin-api' => [
'driver' => 'passport','provider' => 'admin','admin' => [
'driver' => 'session','providers' => [
'users' => [
'driver' => 'eloquent','model' => App\User::class,'admin' => [
'driver' => 'eloquent','model' => App\Admin::class,// 'users' => [
// 'driver' => 'database',// 'table' => 'users',// ],'passwords' => [
'users' => [
'provider' => 'users','table' => 'password_resets','expire' => 60,'throttle' => 60,'admin' => [
'provider' => 'admin',
这是api.PHP
Route::post('loginEmp','AdminController@login');
Route::post('registerEmp','AdminController@register');
Route::post('detailsEmp','AdminController@details')->middleware('auth:admin-api');
这是管理员>
class AdminController extends Controller
{
public $successstatus = 200;
/**
* login api
*
* @return \Illuminate\Http\JsonResponse
*/
public function login(){
if(Auth::guard('admin')->attempt(['email' => request('email'),'password' => request('password')])){
$user = Auth::guard('admin');
$success['token'] = $user->createtoken('MyApp')-> accesstoken;
return response()->json(['success' => $success],$this-> successstatus);
}
else{
return response()->json(['error'=>'Unauthorised'],401);
}
}
/**
* Register api
*
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(),[
'name' => 'required','email' => 'required|email','password' => 'required','c_password' => 'required|same:password',]);
if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()],401);
}
$input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = Admin::create($input);
$success['token'] = $user->createtoken('MyApp')-> accesstoken;
$success['name'] = $user->name;
return response()->json(['success'=>$success],$this-> successstatus);
}
/**
* details api
*
* @return \Illuminate\Http\JsonResponse
*/
public function details()
{
$user = Auth::guard('admin-api');
return response()->json(['success' => $user],$this-> successstatus);
}
}
BadMethodCallException: Method Illuminate\Auth\SessionGuard::createtoken does
not exist. in file C:\xampp\htdocs\MultiAuthApi\vendor\laravel\framework
\src\Illuminate\Support\Traits\Macroable.PHP on line 103
解决方法
您的App\Admin
模型必须实现Illuminate\Contracts\Auth\Authenticatable
接口。 App\User
模型已经实现了此目的,因为它扩展了实现接口的Illuminate\Foundation\Auth\User
。
也许您也希望将App\Admin
模型扩展为Illuminate\Foundation\Auth\User
。
我知道了。我只需要在user()
的末尾添加$user = Auth::guard('admin');
两种身份验证现在都可以正常工作。