Php 将API与Laravel Web App分离后的基本身份验证

Php 将API与Laravel Web App分离后的基本身份验证,php,api,laravel,authentication,Php,Api,Laravel,Authentication,我正在重构代码,从控制器中提取API 在我的API中,我通常需要知道用户的角色,以便显示正确的数据,所以我需要用户的数据 我的第一个想法是根据用户/密码使用基本身份验证对API访问进行身份验证 我的第一个想法是实现一个过滤器,将所有API放在同一个routes组中 中间件看起来像: class simpleAuthMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Ht

我正在重构代码,从控制器中提取API

在我的API中,我通常需要知道用户的角色,以便显示正确的数据,所以我需要用户的数据

我的第一个想法是根据用户/密码使用基本身份验证对API访问进行身份验证

我的第一个想法是实现一个过滤器,将所有API放在同一个routes组中

中间件看起来像:

class simpleAuthMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return Auth::onceBasic('email') ?: $next($request);
    }
}
它起作用了,当执行一个请求时,一个基本的身份验证弹出窗口在导航过程中打扰了我

然后,我试着用这样的口吻:

$response = $client->request('GET', '/tournaments', [
        'auth' => [Auth::user()->email,
                   Auth::user()->password]
    ]);
我在实现它时遇到了一些问题,因为它使用的是未加密的密码,而且我的数据库中只有bcrypt密码。此外,我还通过Google/Facebook管理来自社交名流身份验证的用户,这些用户没有密码

然后我想我可以为每个用户放置一个令牌,并为我的API实现一个令牌安全性。但令牌对于授予或不授予对API的访问权是很好的,但对我来说,它不应该用于检索用户数据。即使我选择了一个256字符的令牌,它也存在着比2个用户获得相同令牌的远程可能性。 此外,这意味着我应该在每个API调用中进行额外的查询,以获取用户信息

所以我需要做的是:

  • 有一种安全的方式来自动验证我的web应用程序中的用户和API访问
  • 可以访问API中的Auth::user()

  • 我需要的是简单的东西,问题似乎并不太复杂。我看到Laravel Spark将处理JWT,所以我将尝试等待Spark释放。与此同时,我该怎么做呢?

    方法是实现JWT。让它工作起来很容易

    请按照教程进行操作:

    了解JWT:


    你也可以用它来做它相当容易。它对小型系统是免费的。

    您可以自己简单地实现JWT吗?是的,我做到了,而且非常喜欢!但我仍然想知道,如果社交名流用户没有密码,我是怎么做到的