laravel - 如果用户成功登录并在 laravel-8 中返回该数据,如何从迁移表中获取特定列数据(角色列)?
问题描述
我开发了一个包含用户的用户控制器,它还包含一个名为角色的列,该列将包含管理员或用户。当任何注册用户登录时,它会返回与我想返回角色相同的令牌(例如,第 6 个用户 ID 登录以及我想返回应该从数据库中获取的用户角色的令牌),请帮助我如何当用户成功登录时获取该角色
user migration table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->enum('role', ['user', 'admin'])->default('user');
$table->string('fullName');
$table->string('email')->unique();
$table->string('mobile')->unique();
$table->string('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
class UserController extends Controller
{
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
public function register(Request $request)
{
$this->validate($request, [
'fullName'=>'required|string|between:3,15',
'email'=>'required|email|unique:users',
'password'=>'required|regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/',
'mobile'=>'required|digits:10',
'role'=>'required|in:user,admin'
]);
$user = new User([
'fullName'=> $request->input('fullName'),
'email'=> $request->input('email'),
'password'=> bcrypt($request->input('password')),
'mobile'=>$request->input('mobile'),
'role'=>$request->role ,
]);
$user->save();
return response()->json(['message'=>'Successfully Created user'],201);
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required'
]);
$credentials = $request->only('email', 'password');
try {
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Invalid Credentials'], 401);
}
}catch (JWTException $e) {
return response()->json(['error' => 'Could not create token'],500);
}
return response()->json(['token' => $token], 200);
}
}
解决方案
我想你要回来了jwt
。解码该jwt
令牌。您可以使用
$user = json_decode(base64_decode($jwt), true);
$role = $user->role;
我认为这应该有效。
推荐阅读
- eclipse - 运行代号一模拟器时突然出现 Eclipse ClassNotFoundException
- gpu - 什么是 Metal 中的“通道 ID”?
- c# - 对象数组,将数据检索到文本框
- javascript - 在 reactJS 中创建一个链接到另一个页面的按钮
- airflow - 气流调度程序定期抱怨没有心跳
- php - Symfony 4 是否在“prod”环境中的每个请求上加载环境变量?
- vue.js - 如何继承视图继承
- c - 谁能帮我用递归解决这个问题?
- mysql - 与 MySQL 一起工作多年的 Perl 脚本在升级到 MariaDB 后不再工作
- java - 将preparedStatement添加到select语句