【问题标题】:Getting authenticated user on redirect using Laravel API endpoints使用 Laravel API 端点在重定向时获取经过身份验证的用户
【发布时间】:2019-11-13 04:12:19
【问题描述】:

我正在使用 Laravel 5.8 构建 API 端点并使用 Passport 处理 API 身份验证。下面是使用 API 的 React 应用程序的简单逻辑

  1. 成功注册会将用户重定向到用户仪表板
  2. 成功登录会将用户重定向到用户仪表板
  3. 仪表板显示用户详细信息

我已经设置了这样的端点

Route::post('register', 'BaseController@register');

Route::post('login', 'BaseController@login);

BaseController 现在看起来像这样

public function register(Request $request)
{
    $validator = Validator::make($request->all(), [
        'firstname' => 'required',
        'lastname'  => 'required',
        'username'  => 'required|email',
        'password'  => 'required'
    ]);

    if ($validator->fails()) {
        return response()->json(['Error', $validator->errors()], 401);
    }

    $user = User::create([
        'firstname' => $request->firstname,
        'lastname'  => $request->lastname,
        'username'  => $request->username,
        'password'  => bcrypt($request->password)
    ]);

    $success['token'] = $user->createToken('Pramopro')->accessToken;

    return response()->json(['success' => $success, 'message' => 'You have successfully registered'], 200);
}

public function login() {
    if (Auth::attempt(['username' => request('username'), 'password' => request('password')])) {
        $user = Auth::user();
        $success['token'] = $user->createToken('Pramopro')->accessToken;

        return response()->json(['success' => $success, 'message' => 'You have succesfully signed in.'], 200);
    }
    else
    {
        return response()->json(['error' => 'Unauthorised'], 401);
    }
}

在 Postman 上测试时,两个 API 端点都能正常工作。

按照逻辑,设置将显示经过身份验证的用户信息的 API 端点的最佳方法是什么?

【问题讨论】:

    标签: php laravel-passport laravel-5.8


    【解决方案1】:

    登录: 我建议您不需要将消息发送回前端或设备。只需像下面这样发送令牌:

    {
        "api_token": "kdlksjdflksjdlfkjsdlkfjslkdfjskjflksdjflskdjflskdjlfksjfd"
    }
    

    如果状态为 200 或 api_token 的值为 true,您可以显示成功消息。

    至于注册: 您只需发送一条消息说成功或其他。如果状态为 200 则理解为用户已注册。

    【讨论】:

    • 我同意保持消息简短或从登录方法中一起删除。但是,关于如何最好地设置在重定向到仪表板时将被调用的 api 的问题仍然存在。你会怎么做?
    • 从您的评论来看,您似乎想说您想在登录或注册后将用户重定向到所需的页面。回答:如果您使用任何前端库或框架,那么在检查状态后,您将使用前端库或框架自己的代码或其中一个包重定向到某个页面。安卓/iOS也是如此。 现在如果您只是使用刀片模板来显示前端内容,那么我相信您知道您一开始就不需要 API。
    • 重定向是在前端 js 代码或设备的 Java 或 Swift 代码上完成的
    • 对,前端会做重定向。我想要做的是有一个端点,它将返回用户详细信息,以便前端可以显示它。说Route::get('profile', 'BaseController@profile')之类的话,那么在profile()方法中应该怎么处理呢?
    • 是的。你还要如何进行身份验证。当我们进行常规会话身份验证时,我们匹配密码。对于 API 身份验证,我们匹配 API 密钥。
    猜你喜欢
    • 2019-04-25
    • 2018-11-26
    • 2022-08-14
    • 1970-01-01
    • 2015-04-20
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多