php - Laravel passport登录系统,如何登录用户并获取access_token和refresh token?

标签 php laravel ionic-framework laravel-passport

我正在使用 laravel 5.6 并且 passport 已安装并且可以正常工作。我想通过从 ionic 3 应用程序发送发布请求来登录用户。我想知道如何制作登录路线。

我已经创建了正在运行的创建帐户路由,并且在用户创建帐户后它返回 access_tokenrefresh_token 。但是如何为登录路由实现这个呢?

我发现我们可以通过将发布请求发送到 http://127.0.0.1:8000/oauth/token 路由来使用以下代码来完成,但是......在 ionic 应用程序本身中保存 client_idclient_secret 是否安全?

通过从 ionic 3 应用程序(或任何其他前端框架)发送发布请求来使用 laravel passport 登录用户的最佳做法是什么?

{
    "grant_type" : "password",
    "client_id" : "2",
    "client_secret" : "HqLqRCRzNN2dwLWM1JhvCoNrbndwNSTGz515hSrswT",
    "username" : "test@test.com",
    "password" : "123456"  
}

最佳答案

2020 年更新

现在有一个 Passport 的替代方案来验证 SPA 和移动应用程序(也由 Laravel 维护):Laravel Sanctum .

注意:这个库需要 Laravel v6.9+。



原始答案

暴露客户端凭据总是有风险的,因为您无法完全控制客户端应用。

如果您不想在客户端存储此类数据,您可以做一个小代理来接收用户名/密码,然后完成添加护照客户端详细信息的调用。

引用 this @adiachenko 的回答:

routes/api.php

Route::post('auth/token', 'Api\Auth\DefaultController@authenticate');
Route::post('auth/refresh', 'Api\Auth\DefaultController@refreshToken');

app/Http/Controllers/Api/Auth/DefaultController.php

<?php

namespace App\Http\Controllers\Api\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;

class DefaultController extends Controller
{
    /**
     * @var object
     */
    private $client;

    /**
     * DefaultController constructor.
     */
    public function __construct()
    {
        $this->client = DB::table('oauth_clients')->where('id', 2)->first();
    }

    /**
     * @param Request $request
     * @return mixed
     */
    protected function authenticate(Request $request)
    {
        $request->request->add([
            'username' => $request->username,
            'password' => $request->password,
            'grant_type' => 'password',
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
            'scope' => '*'
        ]);

        $proxy = Request::create(
            'oauth/token',
            'POST'
        );

        return Route::dispatch($proxy);
    }

    /**
     * @param Request $request
     * @return mixed
     */
    protected function refreshToken(Request $request)
    {
        $request->request->add([
            'grant_type' => 'refresh_token',
            'refresh_token' => $request->refresh_token,
            'client_id' => $this->client->id,
            'client_secret' => $this->client->secret,
        ]);

        $proxy = Request::create(
            '/oauth/token',
            'POST'
        );

        return Route::dispatch($proxy);
    }
}

如您所见,您需要对 /auth/token 发送用户凭据进行 POST 调用:

{ 
   "username" : "some@email.com",
   "password" : "some-awesome-password"
}

然后 authenticate 方法将完成 passport-client 详细信息以继续流程。

关于php - Laravel passport登录系统,如何登录用户并获取access_token和refresh token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48848479/

相关文章:

javascript - $state.go 和导航方向

angular - Ionic - 类别的水平滚动选项卡

php - MySql 中的重音不敏感搜索

php - mock 重载 - 抽象类

php - 您的要求无法解决为 laravel 的一组可安装的软件包

php - 使用 Laravel 每月接收数据

php - 如何引用托管在不同域上的 CSS 资源中的图像位置?

php - magento自定义模块 Controller 无法获取toHtml()函数

php - 将模型转换为数组或 JSON 时无法访问 Laravel 模型访问器

user-interface - 使用 ionic 和 Material 设计登录