首页 > 解决方案 > 如果用户成功登录并在 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);
        
    }
}

这是我的第二列角色的数据库,我想获取管理员或用户的值

标签: laravellaravel-8

解决方案


我想你要回来了jwt。解码该jwt令牌。您可以使用

$user = json_decode(base64_decode($jwt), true);
$role = $user->role;

我认为这应该有效。


推荐阅读