laravel登录状态jwt使用postman调试session和Cookie和Authorization
jwt中使用session在cookie前缀名称是使用的.env中的APP_NAME名称,如:APP_NAME=Lumeng,则Cookie:lumeng_session=xxxxxx
开始
后端php代码:
config/auth.php
<?php
//前端 门卫
$defaults = [
'guard' => 'web',
'passwords' => 'user',
];
//后台 门卫
if (request()->segment(1) == 'api')
{
$defaults = [
'guard' => 'api',
'passwords' => 'sys_user',
];
}
return [
'defaults' => $defaults,
'guards' => [
'web' => [
'driver' => 'jwt',
'provider' => 'user',
'hash' => true,
],
'web2' => [
'driver' => 'session',
'provider' => 'insurancecard_userfront',
'hash' => true,
],
'api' => [
'driver' => 'jwt',
'provider' => 'sys_user',
'hash' => false,
]
],
'providers' => [
'sys_user' => [
'driver' => 'eloquent',
'model' => App\Models\SysUser::class,//对应的模型类
],
'user' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,//对应的模型类
],
'insurancecard_userfront'=>[
'driver' => 'eloquent',
'model' => Modules\Insurancecard\Models\InsurancecardUserFrontModel::class,//对应的模型类
],
],
'passwords' => [
'sys_user' => [
'provider' => 'sys_user',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'user' => [
'provider' => 'user',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
'web2' => [
'provider' => 'web2',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
控制器:
/**
* jwt:
* 请求头header的键名:Authorization: Bearer xxxxxx
*/
function login_jwt()
{
$auth_key = 'web';
$auth_data = auth($auth_key)->user();//jwt
if($auth_data)
{
echo '已登录!(根据 Authorization)'.$auth_data->id;exit;
}
$row_user = UserModel::where([])->first();//注意模型不要选错了
$token = auth($auth_key)->login($row_user);
$return_data = [
'access_token' => $token,
'token_type' => 'Bearer',
'expires_in' => auth($auth_key)->factory()->getTTL() * 60,
];
return $return_data;
}
/**
* session:
* 请求头header的键名:Cookie: admin_api_session=xxxxxx; expires=Wed, 31-May-2023 05:51:34 GMT; Max-Age=1800; path=/; secure; httponly; samesite=lax
*/
function login_session()
{
$auth_key = 'web2';//session
$auth_data = auth($auth_key)->user();//jwt
if($auth_data)
{
echo '已登录!(根据 cookie)'.$auth_data->id;exit;
}
$row_user = InsurancecardUserFrontModel::where([])->first();//注意模型不要选错了
$token = auth($auth_key)->login($row_user);
$return_data = [
'access_token' => $token,
// 'token_type' => 'Bearer',
// 'expires_in' => auth($auth_key)->factory()->getTTL() * 60,
];
return $return_data;
}
模型:
<?php
namespace Modules\Insurancecard\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
class InsurancecardUserFrontModel extends Authenticatable implements JWTSubject
{
use SoftDeletes;
use Notifiable;
protected $table = 'insurancecard_userfront';
protected $primaryKey = 'id';
public $timestamps = true;
protected $dateFormat = 'U';
public function getJWTIdentifier()
{
return $this->getKey();
}
public function getJWTCustomClaims()
{
return [];
}
}
postman模拟请求:
jwt 1
jwt2
session1
session2
结束