laravel - 使用 JWT 向登录请求添加第三个参数
问题描述
我正在使用 Laravel 中的 api 并想稍微编辑登录过程。用户使用用户名和密码登录,但作为第三个参数,我想添加一个 app_id。
这是因为当 app_id 不同时,数据库中的用户名可以是双倍的。这是我当前的登录代码。它使用 JWT 作为驱动程序。
$credentials = request(['username', 'password']);
if(!$token = auth()->attempt($credentials)) {
return response()->json([
'error' => ['code' => 1],
'status' => 'error',
], 401);
}
我怎样才能做到这一点?
亲切的问候,凯文沃尔特
编辑:我的整个 AuthController
class AuthController extends Controller
{
public function __construct()
{
$this->middleware('jwt.verify', ['except' => ['login', 'refresh']]);
}
/**
* Login to get JWT credentials
*/
public function login() {
//TODO: LOCKOUT AFTER X AMOUNT OF TRIES
if(!$token = auth()->attempt($this->credentials())) {
return response()->json([
'error' => ['code' => 1],
'status' => 'error',
], 401);
}
return $this->me(true, $token);
}
public function checkPin() {
$username = request('username');
$pincode = request('pincode');
$user = auth()->user();
if($user && $user->username && $user->pincode && $username == $user->username && $pincode == $user->pincode) {
return $this->outputJson(0, 'auth', 'checkPin',[
"firebase_key" => $this->create_custom_token($user->uid, true),
"pin_ok" => 1,
]);
} else {
return $this->outputJson(0, 'auth', 'checkPin', ["pin_ok" => 0]);
}
}
public function me($withToken = false, $token = "") {
$user = auth()->user();
$output = $user;
$output->groups = $user->groups;
$output->categories = $user->categories;
$output->hasPin = $user->hasPin();
$headers = array();
if($withToken) {
$headers["X-TOKEN-RETURN"] = $token;
}
return $this->outputJson('0', 'auth', 'me', $output, $headers);
}
public function logout() {
auth()->logout();
return response()->json(['message' => 'Successfully logged out']);
}
}
解决方案
就像在凭证中合并 app_id 一样简单。这是工作示例!
//Add app ID into the mix of credentials
protected function credentials()
{
return array_merge(request(['username', 'password']), ['app_id' => \request()->header('X-APP-ID')]);
}
/**
* Login to get JWT credentials
*/
public function login() {
//TODO: LOCKOUT AFTER X AMOUNT OF TRIES
if(!$token = auth()->attempt($this->credentials())) {
return response()->json([
'error' => ['code' => 1],
'status' => 'error',
], 401);
}
return $this->me(true, $token);
}
推荐阅读
- mysql - 如何从 VB.NET 和 MySql 8 中的给定记录中读取特定列?
- reactjs - 正确格式化引导列?(抵消等)
- php - 使用 Laravel Excel 包添加自定义页脚和页眉
- loadrunner - 需要帮助在 Web 自定义请求中参数化 JSON 值
- c++ - 什么是“从标准输入(内存管理)读取无界流”的示例
- c# - 异步 StackOverflowException
- r - as.POSIXct() 为特定日期时间生成 NA
- html - 多级下拉菜单
- vb.net - Devexpress webchartcontrol如何获取无限颜色集合并存储在列表数组中
- java - 有没有办法使用扫描仪创建一个简单的方程