首页 > 解决方案 > 魔术链接的签名 URL(无密码登录)

问题描述

我想知道是否可以使用签名 URL 进行 Magic Link 登录(无密码)。我知道人们正在使用存储在数据库中的令牌,然后比较每个令牌属于谁以及是否仍然有效。

    /**
     * 获取给定通知的验证 URL。
     *
     * @param \App\User $user
     * @return 字符串
     */
    受保护的函数 authenticationUrl(User $user): 字符串
    {
        返回 URL::temporarySignedRoute(
            'login.magic_link.authenticate',
            现在()->添加分钟(10),
            ['uuid' => $user->uuid]
        );
    }

我正在使用 Laravel 提供的签名 URL 将链接发送到我的应用程序。如果用户单击该链接,他将被重定向到身份验证方法。

    /**
     * 验证经过验证的用户。
     *
     * @param \Illuminate\Http\Request $request
     * @return \照亮\查看\查看
     * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
     */
    公共功能验证(请求 $request):重定向响应
    {
        尝试 {
            $user = User::where($request->only('uuid'))->firstOrFail();
        } 捕捉 (ModelNotFoundException $e) {
            返回重定向()->路由('login.magic_link.index')
                ->withErrors(['email' => '找不到电子邮件地址。']);
        }

        身份验证::登录($用户);
        返回重定向()->路由($this->redirectTo);
    }

问题是这是否安全并被视为一种良好做法。如果不好,有人可以向我解释为什么吗?

标签: phplaravellaravel-5

解决方案


推荐阅读