我是laravel 5.8的新手,无法在api控制器中使用Auth
,以下是详细信息:
users
更改为User
User.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $table = 'User';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'firstName', 'lastName', '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',
];
}
未更改 auth.php
中的任何内容<?php
return
['defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];
我的问题:如何使 Auth :: check()在此控制器中工作并获取用户ID。这将返回Not logged
<?php
namespace App\Http\Controllers\api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Session;
use DB;
use Response;
use Auth;
class AccountsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$userID = Auth::id();
if (Auth::check()) {
return "User logged , user_id : ".$userID ;
}else{
return "Not logged"; //It is returning this
}
}
}
答案 0 :(得分:2)
如果使用API路由,将没有登录用户。 API的身份验证是通过令牌完成的,您可以在Laravel docs中进行了解。
除非使用网络路由,否则不会调用会话中间件,因此会话不会启动,因此无法使用Auth。
将Auth与API路由一起使用是您不正常的尝试,以达到什么目的。
答案 1 :(得分:1)
使用可以尝试此操作以获得身份验证用户。这将找到用户并设置Auth :: user()。
Auth::attempt(['email' => request('email'), 'password' => request('password')])
答案 2 :(得分:0)
在您的控制器上,您似乎在尝试使用API路由时访问会话。 API路由无权访问会话。您应该从web.php
中定义的路由中调用控制器,或者使用令牌进行身份验证。请咨询Laravel docs,以探索API身份验证的可能性。