laravel5.8| 시간 제한이 있는 URL 페이지로 변환하기 위한 QR 코드 만들기

개요


제목 불명...
QR 이미지 읽기 → 지정된 시간 내에 설정된 URL 페이지를 비행하는 API를 시도해 봅니다.

컨디션


・laavel5.8
・php7.2

이루어지다


Simple QrCode 사용


Simple QrCode.
결국 PNG를 사용하려고 했지만 이미지 처리를 위한 프로그램 라이브러리에 들어가지 않아 오류가 발생했습니다...
오류가 발생하면 phpinfo()에서 gd 구역을 확인하십시오
$ php -m
에 나타났는지 확인하고 php-gd가 없으면 설치하십시오💫
docker를 시작할 때 오류가 발생했을 때
docker 환경에 설치하고 docker를 시작할 때 오류가 발생하여 당황스럽습니다
PHP GD가 설치된 Docker file의 조금 복잡한 내용 노트
기사에 기재되다
참조library/php – Docker Hub 수정 후 오류가 사라집니다.감사합니다 여러분...!

UID 생성


참고[php/Laravel] UID 생성의 문장...차라리 그냥...이(가) 구현되었습니다.정말 고마워...!
class Uuid
{
    protected $uuid;
    public function __construct($prefix = '', $entropy = false, $hash = null)
    {
        switch ($hash) {
            case 'md5':
                $this->uuid = md5(uniqid($prefix, $entropy));
                break;
            default:
                $this->uuid = uniqid($prefix, $entropy);
            break;
        }
    }
    public function __toString()
    {
        return $this->uuid;
    }
}

컨트롤러 생성


30분 정도는 기본적으로 config/const라는 상수 서류를 잘 쓰지 못하고 그곳에서 얻는다.
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Uuid;
use Carbon\Carbon;
use App\Http\Requests\CheckinRequest;
use SimpleSoftwareIO\QrCode\Facades\QrCode;

class CheckinController extends Controller
{
    public function create(CheckinRequest $checkinRequest)
    {
        $token = new Uuid('', true,'md5');
        // urlの有効期限を30分にする
        $time  = Carbon::now()->addMinutes(config('const.ThirtyMinutes'));
       // フォーマットを指定してbase64化する
        $src = base64_encode(QrCode::format('png')->size(200)->generate(URL::temporarySignedRoute('checkin', $time, ['qr_token' => $token])));

        return view('/checkin',compact('src'));
    }
}
temporarySignedRoute서명 URL의 일정 기간 동안 유효하지 않은 URL 생성 방법

web.php에서 경로 만들기


Route::get('/checkin/{qr_token}', function (Request $request) {
    if (!$request->hasValidSignature()) {
        abort(500);
    }
    echo 'Created_page';
})->name('checkin');
기한이 지난 경우 403이 아니라 500이므로 중간부품을 등록하지 않고 논평한다.
// ‘signed’ => \Illuminate\Routing\Middleware\ValidateSignature::class

blade 파일 만들기


<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
</head>
<body>
    <div class="flex-center position-ref full-height">
        <div class="content">
            <div class="title">
            作成したQRコード</br>
            <img src="data:image/png;base64,{{ $src }}"></br>
            </div>
        </div>
    </div>
</body>
</html>
이렇게 되면 QR 이미지가 나타난다('봉화7447;')
포스맨으로 확인했으니까 그 화면에 QR 이미지가 나왔을 때 좀 흥분했어(*'!
URL의 유효기간을 30분으로 설정했기 때문에 30분 이내에 있으면 echo가 Created를 설정합니다페이지가 표시되며 30분 후에 500페이지로 이동합니다.
실제로 API base64의 시간 제한이 부착된 URL을 json으로 보내려는 QR 코드 때문에 컨트롤러의 마지막 부분은 json을 사용했습니다.
return response()->json(['qrcode' => $src])->setStatusCode(201);
시간이 많이 걸렸지만 이룰 수 있다면 감개무량하다...

좋은 웹페이지 즐겨찾기