![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/eLIGLF/btst0ymO20L/5nkWeYeAlA5JtwaokgoHZ1/img.png)
PHP + LARAVEL + Passport 둘 이상의 Guard를 설정하는 것은 라라벨 공식 문서를 통해서 쉽게 확인이 가능하다. 세션과 Passport를 이용한 토큰 인증을 적용하여 router 마다 middleware에 적용하면 쉽게 사용할 수 있다. 기존에 무의식적으로 사용했던 client_credentials은 사용자에 대한 인증이라기 보다 머신(서버)에 대한 인증이라고 보는게 맞다. grant_type:Authorization_code를 이용하여 사용하려 했으나, 인증에 대한 middleware 를 동시에 사용하고자 하지만 기본적으로 하나의 인증이 실패할 경우 다음을 진행하지 않는다. 예를 들어 //route.php Route::get('user', function() {})->middlewa..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/dQVN6E/btsnohM0MNG/ns00Tzyk8Z3kFgdhxDXjck/img.png)
##composer 설치 curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin/ //curl이 없을 경우 php cli로 실행 php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/local/bin/ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/baizU8/btsmGB6yVqO/9u9U9v1Fedwji1lhMu0Iqk/img.webp)
편집 i: 현재 위치에 삽입 모드로 전환합니다. a: 현재 위치의 다음 문자 뒤에 삽입 모드로 전환합니다. o: 현재 줄 다음에 새로운 줄을 추가하고 삽입 모드로 전환합니다. dd: 현재 줄을 삭제합니다. yy: 현재 줄을 복사합니다. p: 클립보드에 복사한 줄을 붙여넣습니다. u: 마지막 동작을 취소합니다. Ctrl + r: 취소한 동작을 다시 실행합니다. :w: 현재 파일을 저장합니다. :q: Vim을 종료합니다.이동 h: 왼쪽으로 한 칸 이동합니다. j: 아래로 한 줄 이동합니다. k: 위로 한 줄 이동합니다. l: 오른쪽으로 한 칸 이동합니다. gg: 파일의 첫 번째 줄로 이동합니다. G: 파일의 마지막 줄로 이동합니다. Ctrl + b: 한 화면 위로 스크롤합니다. Ctrl + f: 한 화면 아..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/YcR6h/btsj03QugBr/Mf70jzRVi2Nk5lUV8jdxH1/img.png)
L5-Swagger BookController Get all books URL: /api/books Method: GET Description: Get all books /** * @OA\Get( * path="/api/books", * tags={"Books"}, * summary="Get all books", * @OA\Response( * response=200, * description="Returns all books", * @OA\JsonContent( * type="array", * @OA\Items(ref="#/components/schemas/Book") * ), * ), * ) */ public function index() { return Book::all(); } Create a n..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/nCRIp/btsdQctebYl/XaFyT4DfYC7s5rFtkNtDIK/img.png)
go get github.com/go-redis/redis/v8 package main import ( "context" "fmt" "github.com/go-redis/redis/v8" ) func main() { // Redis 연결 rdb := redis.NewClient(&redis.Options{ Addr: "{host}", Password: "{password}", DB: "{dababase}", }) ctx := context.Background() pubsub := rdb.Subscribe(ctx, "mychannel") defer pubsub.Close() // 고루틴으로 수신된 메시지를 처리 go func() { for { msg, err := pubsub.ReceiveMessage(c..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/demq8V/btr3QxgKPrL/Jg2nyc99xPyvz8XWEAsTn1/img.png)
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { // 크롤링할 URL 리스트 urls := []string{ "https://www.example.com", "https://www.example.com/page1", "https://www.example.com/page2", } // 응답 본문을 받을 채널 respChan := make(chan string) // URL 리스트를 순회하며 각 URL을 처리하는 고루틴을 생성합니다. for _, url := range urls { go func(url string) { respBody, err := httpGet(url) if err != nil { fmt.Printf("Error ge..
- Total
- Today
- Yesterday
- 정규식
- 자바스크립트
- POP3
- bitwarden-cli
- addMonth
- session+token authorize
- addMonthWithoutOverflow
- graphql-php
- l5-swagger
- 테스트_다중트랜잭션
- laravel-test
- php-laravel
- php
- password-manager
- MySQL
- vim
- graphql
- aaa패턴
- 라라벨
- composer-self-update
- exception-test
- 메일
- redis
- django
- 둘이상인증한번에사용하기
- 정의
- Python
- 나는욕심쟁이
- Laravel
- l5-swagger-response