Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户

Posted

技术标签:

【中文标题】Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户【英文标题】:Laravel Set Session or Token for External User Login Successfully - No User Database Only Api user 【发布时间】:2019-12-27 19:02:12 【问题描述】:

我正在使用外部 API 从外部站点提取用户信息。我已经完成了 Laravel 上的用户登录路由,并从控制器文件中获取了数据。从外部用户 API 链接拉取和显示数据没有问题。

如何像普通 Laravel 用户一样对使用外部 API 登录但没有数据库的用户进行令牌和会话操作。请注意,我可以使用可用的用户 API 令牌的相同令牌部分

此外,我不想在每次用户登录时通过在控制器之间分配会话来传输信息。用户登录后如何在所有交易中分配令牌?

这些控件是通过登录屏幕的 post 方法来实现的

public function loginData(Request $request)
    

        $password = $request->password;
        $email = $request->email;
        $apiman = "Bearer $this->accesstokenApi()";
        $client = new Client();
        $response = $client->post('https://testapi.com/api/v3/Profile', [
            'headers' => 
            [
                'cache-control' => 'no-cache', 
                'authorization' => $apiman, 
                'content-type'  => 'application/json'
            ],
            'json' => 
            [
                'Email' => $email,
                'Password' => $password
            ],

        ]);
        $data = json_decode((string) $response->getBody(), true);


        if ($data['ResponseType']=="Ok") 
            session()->put('token', $data);
            return redirect('/user-detail');
         else 
            return response()->json([
                'success' => false,
                'message' => 'Invalid Email or Password',
            ], 401);
        
    

用户登录正常。之后,机器应该提供什么令牌,或者会话可以在哪里提供给该用户?此外,如果用户已登录,我如何让他看到主页而不是再次显示登录表单,就像在 Laravel 登录过程中一样?

【问题讨论】:

【参考方案1】:

也许您可以创建新的中间件来检查会话中是否存在令牌

这是您可以根据需要使用和调整的示例。

namespace App\Http\Middleware;

use Closure;

class Myauth

    public function handle($request, Closure $next, $guard = null)
    
        if(session()->has('token')) 
            return $next($request);    
         else 
            return response('Unauthorized.', 401);
            //OR return redirect()->guest('/');
        
    

【讨论】:

我觉得你这里不需要 else 声明

以上是关于Laravel 为外部用户登录成功设置会话或令牌 - 无用户仅数据库 Api 用户的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 登录成功后声明全局会话变量

Laravel - 使用会话令牌进行身份验证

Laravel 会话过期事件

会话超时后的 laravel csrf 令牌不匹配异常

通过访问或 id 令牌/令牌交换建立 SSO/设置 cookie

Laravel 5.3记住我身份验证问题