250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Passport
- MYSQL
- flutter
- Android
- alb
- Vue
- php
- mac
- MacOS
- ubuntu
- nginx
- PostgreSQL
- Laravel
- 구글 API
- https
- 안드로이드
- selenium
- python
- AWS
- 파이썬
- Prometheus
- node
- Vue.js
- SSH
- 해시키
- pip
- FCM
- Cordova
- window
- OAuth
Archives
- Today
- Total
print( sjw.iq == 200) output : true
[Laravel] Passport를 이용한 client_id, client_secret 발급하기(oauth) 본문
728x90
반응형
안녕하세요!
저번에 passport를 이용한 oauth 포스팅을 했었습니다.
이번에는 client_id 와 client_secret를 발급하는 방법에 대해 포스팅하겠습니다.
참고 : https://laravel.kr/docs/5.8/passport
라라벨 도큐멘트를 보면 JSON API를 지원하며
API는 /oauth/clients (GET), /oauth/clients (POST), /oauth/clients/{cklient-id} (PUT) 등이 있습니다.
그런데 막상 API를 호출해보면 csrf mismatch 라던가 401을 뱉는데요!
Artisal call도 마찬가지로 오류가 있었습니다.
하지만 간단한 방법이 있습니다.
다음과 같이 Laravel\Passport\ClientRepository 를 이용하면 됩니다!!!
예시는 패스워드 권한 생성에 대한 메소드 입니다.
<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
use Laravel\Passport\ClientRepository;
class UserController extends BaseController
{
public function createUser() {
$test = new ClientRepository();
return $test->createPasswordGrantClient(null, 'hello','http://localhost');
}
}
해당 도큐멘트는 찾지 못해서 해당 클래스를 복사해서 올려드릴게요~!
<?php
namespace Laravel\Passport;
use Illuminate\Support\Str;
use RuntimeException;
class ClientRepository
{
/**
* Get a client by the given ID.
*
* @param int $id
* @return \Laravel\Passport\Client|null
*/
public function find($id)
{
$client = Passport::client();
return $client->where($client->getKeyName(), $id)->first();
}
/**
* Get an active client by the given ID.
*
* @param int $id
* @return \Laravel\Passport\Client|null
*/
public function findActive($id)
{
$client = $this->find($id);
return $client && ! $client->revoked ? $client : null;
}
/**
* Get a client instance for the given ID and user ID.
*
* @param int $clientId
* @param mixed $userId
* @return \Laravel\Passport\Client|null
*/
public function findForUser($clientId, $userId)
{
$client = Passport::client();
return $client
->where($client->getKeyName(), $clientId)
->where('user_id', $userId)
->first();
}
/**
* Get the client instances for the given user ID.
*
* @param mixed $userId
* @return \Illuminate\Database\Eloquent\Collection
*/
public function forUser($userId)
{
return Passport::client()
->where('user_id', $userId)
->orderBy('name', 'asc')->get();
}
/**
* Get the active client instances for the given user ID.
*
* @param mixed $userId
* @return \Illuminate\Database\Eloquent\Collection
*/
public function activeForUser($userId)
{
return $this->forUser($userId)->reject(function ($client) {
return $client->revoked;
})->values();
}
/**
* Get the personal access token client for the application.
*
* @return \Laravel\Passport\Client
*
* @throws \RuntimeException
*/
public function personalAccessClient()
{
if (Passport::$personalAccessClientId) {
return $this->find(Passport::$personalAccessClientId);
}
$client = Passport::personalAccessClient();
if (! $client->exists()) {
throw new RuntimeException('Personal access client not found. Please create one.');
}
return $client->orderBy($client->getKeyName(), 'desc')->first()->client;
}
/**
* Store a new client.
*
* @param int $userId
* @param string $name
* @param string $redirect
* @param bool $personalAccess
* @param bool $password
* @return \Laravel\Passport\Client
*/
public function create($userId, $name, $redirect, $personalAccess = false, $password = false)
{
$client = Passport::client()->forceFill([
'user_id' => $userId,
'name' => $name,
'secret' => Str::random(40),
'redirect' => $redirect,
'personal_access_client' => $personalAccess,
'password_client' => $password,
'revoked' => false,
]);
$client->save();
return $client;
}
/**
* Store a new personal access token client.
*
* @param int $userId
* @param string $name
* @param string $redirect
* @return \Laravel\Passport\Client
*/
public function createPersonalAccessClient($userId, $name, $redirect)
{
return tap($this->create($userId, $name, $redirect, true), function ($client) {
$accessClient = Passport::personalAccessClient();
$accessClient->client_id = $client->id;
$accessClient->save();
});
}
/**
* Store a new password grant client.
*
* @param int $userId
* @param string $name
* @param string $redirect
* @return \Laravel\Passport\Client
*/
public function createPasswordGrantClient($userId, $name, $redirect)
{
return $this->create($userId, $name, $redirect, false, true);
}
/**
* Update the given client.
*
* @param Client $client
* @param string $name
* @param string $redirect
* @return \Laravel\Passport\Client
*/
public function update(Client $client, $name, $redirect)
{
$client->forceFill([
'name' => $name, 'redirect' => $redirect,
])->save();
return $client;
}
/**
* Regenerate the client secret.
*
* @param \Laravel\Passport\Client $client
* @return \Laravel\Passport\Client
*/
public function regenerateSecret(Client $client)
{
$client->forceFill([
'secret' => Str::random(40),
])->save();
return $client;
}
/**
* Determine if the given client is revoked.
*
* @param int $id
* @return bool
*/
public function revoked($id)
{
$client = $this->find($id);
return is_null($client) || $client->revoked;
}
/**
* Delete the given client.
*
* @param \Laravel\Passport\Client $client
* @return void
*/
public function delete(Client $client)
{
$client->tokens()->update(['revoked' => true]);
$client->forceFill(['revoked' => true])->save();
}
}
위의 메소드 중에 사용하고 싶은 메소드를 사용하시면 될 것 같습니다~!
728x90
반응형
'PHP' 카테고리의 다른 글
[Laravel] Laravel Scheduler (0) | 2020.03.18 |
---|---|
[Laravel] Laravel에서 Swagger 사용하기! (0) | 2020.03.13 |
[Laravel] MySQL 8.X 버전 인증 오류 (authentication method unknown to the client) (0) | 2020.02.11 |
[Laravel] Passport 사용하기 (oauth2.0, REST API) (0) | 2020.02.11 |
[Laravel] laravelcollective/html https 적용하기 (0) | 2020.02.04 |
Comments