Php 使用Laravel Passport注册用户

Php 使用Laravel Passport注册用户,php,laravel,oauth,laravel-5.4,laravel-passport,Php,Laravel,Oauth,Laravel 5.4,Laravel Passport,我设置了密码授权(它是应用程序的后端)。现在,我可以将post请求发送到oauth/token,它可以在Postman上工作。但是,如果我也想从api注册用户,该怎么办 我知道我可以使用当前的/register路径,但是,我是否需要将用户重定向回登录页面,然后他使用凭据再次登录 或者在RegisterController中的registered()函数中,我是否应该重定向到oauth/token路由?(为此,请注意,我正在发送“x-www-form-urlencoded”中的所有5个数据,它似乎

我设置了密码授权(它是应用程序的后端)。现在,我可以将post请求发送到
oauth/token
,它可以在Postman上工作。但是,如果我也想从api注册用户,该怎么办

我知道我可以使用当前的
/register
路径,但是,我是否需要将用户重定向回登录页面,然后他使用凭据再次登录

或者在RegisterController中的
registered()
函数中,我是否应该重定向到
oauth/token
路由?(为此,请注意,我正在发送“x-www-form-urlencoded”中的所有5个数据,它似乎可以工作。但是,我是否需要在标题中分隔一些数据?这对我来说很模糊,所以只想问一下我什么时候有机会)

或者我应该在
oauth/token
方法中添加类似的内容吗?实际上,我试图捕捉
上发布的
$request
数据AccessTokenController@issueToken
方法,但我不知道如何操作
parsedBody
数组。如果我从实际库中触发我的register函数,我怎么知道它是register还是login

也许我遗漏了一些信息,但是我找不到任何基于这个主题的信息。如何正确处理Passport中的注册用户



更新:接受答案显示“注册”周期;在它下面,我添加了“登录”和“刷新令牌”实现。希望有帮助:)

在API中创建路由作为

Route::post('register','Api\UsersController@create');
在UsersController中创建方法
create()


在创建新用户之后,返回访问令牌。

在I年之后,我想出了如何实现整个周期

@Nileshsinh方法显示寄存器周期

下面是登录和刷新令牌部分:

Route::post('auth/token', 'Api\AuthController@authenticate');
Route::post('auth/refresh', 'Api\AuthController@refreshToken');
方法:

class AuthController extends Controller
{
    private $client;

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

    /**
     * @param Request $request
     * @return mixed
     */
    protected function authenticate(Request $request)
    {
        $request->request->add([
            'grant_type' => 'password',
            'username' => $request->email,
            'password' => $request->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,
            'scope' => ''
        ]);

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

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

在最近部署了Laravel6之后阅读本文,我的解决方案如下

当您遵循了Laravel中定义的步骤,并将
HasApiTokens
特性添加到
User
模型中时,您可以对用户实体调用
createToken
函数

另外,在您的
RegisterController
中,有一个
registerusers
特性中的
registered
函数,您可以实现该函数,当用户成功注册时会调用该函数。因此,您可以通过以下方式实现此功能:

protected function registered(Request $request, User $user)
{
    $token = $user->createToken('tokenName');

    return response()->json([
        'user' => $user,
        'token' => $token->accessToken,
    ]);
}

有关注册周期的更多信息,请参见
registerUsers
trait中的
register
功能。

您好,我有两个问题:
1
为什么在
\u构造
部分获得静态用户id
2
我们为什么要刷新令牌?(我的意思是好处是什么?@mafortis-
1
-它是应用程序的
oauth\u客户端
id。当您使用任何第三方api时,请考虑它。当您注册时,您首先注册您的应用程序以获取API密钥API secret,对吗?(以FaceBook api为例,您可以获得应用程序的凭据)。这里也一样<代码>OAuth客户端就是这样。然而,由于我不想公开我的api,我没有很多oauth客户机,所以我只获取它。否则,(如果我将有许多oauth客户端),那么我将接受应用程序的oauth凭据(api密钥和api机密),并将其作为用户凭据。
2
-刷新令牌只是为了安全,因为as令牌是任何用户的“身份验证”,如果其他人有他的令牌,他可以模拟那个用户:)这就是为什么刷新令牌很好:)(大公司会在10分钟后终止令牌)-希望这有帮助:)解释得很好,值得一试:但这似乎生成了一个个人令牌,而不是访问令牌或刷新令牌。这不是问题中所问的密码授予。这个答案确实有效。但它不会检查witch客户端应用程序是否发出请求
protected function registered(Request $request, User $user)
{
    $token = $user->createToken('tokenName');

    return response()->json([
        'user' => $user,
        'token' => $token->accessToken,
    ]);
}