通过在Laravel中传递令牌来获取用户ID

时间:2019-12-09 05:47:24

标签: laravel api laravel-passport

如何通过在Laravel中传递令牌来获取用户ID? 我想从请求中获取用户令牌,然后将用户头像发送给他。

3 个答案:

答案 0 :(得分:1)

尝试一下

 $userid = Auth::guard('api')->user()->id;
 echo $userid;

答案 1 :(得分:0)

您可以在控制器中添加它

$user = Auth::user();

if ($user)
{
    return $user->avatar;
}

您可以使用Auth获取经过身份验证的用户。

答案 2 :(得分:0)

您可以使用Crypt Facade对用户ID进行加密和解密,并根据情况进行传递。

我建议选中API token authentication,如果您不想使用它,则可以通过非常简单和本机的方式进行以下操作:

  1. 创建一个令牌,其中已加密用户ID。
  2. 将令牌传递到输入表单,将其保留为隐藏表单值。
  3. 接收到带有令牌的请求后,解密令牌,提取id并获取结果并发送。

一些安全建议:

  • [取决于用例]在加密和解密时,以及
    user_id还附加日期时间值,例如时间戳。这样您就可以执行令牌到期验证。
// Controller
public function index() {
    return view('/top/index.php', [$token => $this->getToken()]);
}

private function getToken() {
    $id = '100001'; //get from db or wherever u need

    // this just example
    return Crypt::encrypt( $id. ':' . time();
}

然后在表单/刀片中

<form>
....
    <input hidden value = "{{ $token }}" name='token'>
....
    <input type submit>

</form>

在收到发布请求后

// controller
public function postIndex(Request $request) {
    $userId = $this->extractIdFromToken($request->input('token'));
    ...
    ...
}

private function extractIdFromToken($token) {
    if ($token === null) {
       throw new \Exception('Missing token');
    }

    $tokenValue = explode(':', Crypt::decrypt($token));
    // do verification of time needed else go to next
    return $tokenValue[0] ?? null;
}