基于 Laravel Auth 实现自定义接口 API 用户认证详解

本文详细介绍了如何基于Laravel的默认Auth组件实现API用户认证,探讨了微服务架构下自定义认证的需求。内容涵盖了UserProvider接口、自定义认证模型、Guard接口(包括SessionGuard、TokenGuard)的实现,以及如何配置自定义的API Guard。
摘要由CSDN通过智能技术生成

基于 laravel 默认的 auth 实现 api 认证

现在微服务越来越流行了. 很多东西都拆分成独立的系统,各个系统之间没有直接的关系. 这样我们如果做用户认证肯定是统一的做一个独立的 用户认证 系统,而不是每个业务系统都要重新去写一遍用户认证相关的东西. 但是又遇到一个问题了. laravel 默认的auth 认证 是基于数据库做的,如果要微服务架构可怎么做呢?

实现代码如下:

UserProvider 接口:

\/\/ 通过唯一标示符获取认证模型
public function retrieveById($identifier);
\/\/ 通过唯一标示符和 remember token 获取模型
public function retrieveByToken($identifier, $token);
\/\/ 通过给定的认证模型更新 remember token
public function updateRememberToken(Authenticatable $user, $token);
\/\/ 通过给定的凭证获取用户,比如 email 或用户名等等
public function retrieveByCredentials(array $credentials);
\/\/ 认证给定的用户和给定的凭证是否符合
public function validateCredentials(Authenticatable $user, array $credentials);

Laravel 中默认有两个 user provider : DatabaseUserProvider & EloquentUserProvider.
DatabaseUserProvider
Illuminate\Auth\DatabaseUserProvider

直接通过数据库表来获取认证模型.

EloquentUserProvider
Illuminate\Auth\EloquentUserProvider

通过 eloquent 模型来获取认证模型


根据上面的知识,可以知道要自定义一个认证很简单。

自定义 Provider

创建一个自定义的认证模型,实现 Authenticatable 接口;

App\Auth\UserProvider.php

<?php

namespace App\Auth;

use App\Models\User;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider as Provider;

class UserProvider implements Provider
{

    \/**
     * Retrieve a user by their unique identifier.
     * @param  mixed $identifier
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     *\/
    public function retrieveById($identifier)
    {
        return app(User::class)::getUserByGuId($identifier);
    }

    \/**
     * Retrieve a user by their unique identifier and "remember me" token.
     * @param  mixed  $identifier
     * @param  string $token
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     *\/
    public function retrieveByToken($identifier, $token)
    {
        return null;
    }

    \/**
     * Update the "remember me" token for the given user in storage.
     * @param  \Illuminate\Contracts\Auth\Authenticatable $user
     * @param  string                                     $token
     * @return bool
     *\/
    public function updateRememberToken(Authenticatable $user, $token)
    {
        return true;
    }

    \/**
     * Retrieve a user by the given credentials.
     * @param  array $credentials
     * @return \Illuminate\Contracts\Auth\Authenticatable|null
     *\/
    public function retrieveByCredentials(array $credentials)
    {
        if ( !isset($credentials['api_token'])) {
            return null;
        }

        return app(User::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值