顯示具有 Laravel 標籤的文章。 顯示所有文章
顯示具有 Laravel 標籤的文章。 顯示所有文章

2023/08/30

Laravel 9 Google 2FA(Two-factor authentication)

2FA全名為「Two-factor authentication」,中文稱為「雙重驗證」
兩種不同的元素,合併在一起,來確認使用者的身分。
有兩種密碼演算法
HOTP(HMAC-based One-time Password),RFC4226
金鑰和隨機資訊雜湊後,取N個字作為密碼
TOTP(Time-Based One-Time Password),RFC6238
透過時間來產生一次性密碼
邏輯如下:
呼叫API時先進到Verify2FA這個Middleware
檢查是否有使用帳號密碼登入過,沒有則讓他呼叫API
登入後如果2FA金鑰為空,回傳錯誤訊息,讓Front-End轉跳到顯示QRCode頁面
進入頁面呼叫get2FAQRCodeUrl,Front-End將URL轉成QRCode Image,接著使用者掃完後下一步
開始驗證2FA,驗證通過在Session儲存twoFAChecked為true
登入後如果還沒驗證過2FA,回傳錯誤訊息,讓Front-End轉跳到顯示輸入2FA驗證頁面
登出後將Session清空
首先安裝google2fa-laravel套件
composer require pragmarx/google2fa-laravel

Laravel 9 限制IP登入

之前被要求要做到的功能,後面又棄用了
routes:
<?php
use Illuminate\Support\Facades\Route;
//限制Admin登入時要符合IP
Route::middleware('limitAdminLoginIP')->group(function () {
	//Admin login
	Route::post('/login', [\App\Http\Controllers\v1\admin\UserController::class, 'login']);
});


app/Http/Kernel.php
<?php

namespace App\Http;

use App\Http\Middleware\LimitAdminLoginIP;
use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array>
     */
    protected $middlewareGroups = [
        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \Illuminate\Session\Middleware\StartSession::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \App\Http\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'limitAdminLoginIP' => LimitAdminLoginIP::class,
    ];
}



2023/05/11

Laravel API V1/V2

/**
* v1
*/
Route::prefix('v1')->middleware('api')->group(function () {
	    //Test
        Route::get('/test', [\App\Http\Controllers\v1\TestController::class, 'test']);
});
https://localhost/api/v1/test

/**
* v2
*/
Route::prefix('v2')->middleware('api')->group(function () {
	    //Test
        Route::get('/test', [\App\Http\Controllers\v1\TestController::class, 'test']);
});

https://localhost/api/v2/test

參考資料:
https://www.mynotepaper.com/laravel-api-versioning-with-api-key-in-simple-method/
https://medium.com/parenting-tw/custom-api-versioning-route-file-in-laravel-b65e637dfbaf
https://stackoverflow.com/questions/51739960/laravel-api-versioning-folders-structure

2023/04/19

laravel-swoole Laravel Auth driver [jwt] for guard [api] is not defined

配置Swoole前,如果JWT都沒問題
配置後出現Auth driver [jwt] for guard [api] is not defined就要在swoole_http.php的providers加入
PHPOpenSourceSaver\JWTAuth\Providers\LaravelServiceProvider::class,
即可



2020/10/06

讓Laravel 更新後能夠在 Chrome Reload 頁面

每次更新好頁面時,都得重新去刷新頁面
之前就找了LiveReload這個套件 先在Project底下輸入
npm install webpack-livereload-plugin@1 --save-dev

接著在webpack.mix.js加入
var LiveReloadPlugin = require('webpack-livereload-plugin');

mix.webpackConfig({
    plugins: [
        new LiveReloadPlugin()
    ]
});

最後再主要頁面加入
@if(config('app.env') == 'local')
    
@endif

執行
npm run watch

另一種方式則可以透過Browsersync
輸入
npm install -g browser-sync

再webpack.mix.js加入

mix.browserSync();
or
mix.browserSync('127.0.0.1:8000');

2020/05/25

Use React.js react-dom-router with Laravel

架構為Laravel提供API,React則是前端
Laravel auth的guard則是web
Route::get('{reactRoutes}', function () {
    return view('index'); // your start view
})->where('reactRoutes', '^((?!api).)*$');
參考資料:
https://stackoverflow.com/questions/40719951/how-to-use-react-router-with-laravel

2020/04/03

Laravel 5.5 @php

@php
$a = 2;
@endphp

Laravel 5.5 css/js cache

再.htaccess內加入下方代碼即可,Cache2天

    <FilesMatch "\.(css|js)$">
    Header set Cache-Control "max-age=172800, public, must-revalidate"
    </FilesMatch>

2020/03/07

Laravel 5.5 Install Bootstrap 4.4.1

首先移除原本的Bootstrap
npm uninstall --save-dev bootstrap-sass


接著安裝Bootstrap4以及popper.js
npm install bootstrap@4.4.1 popper.js --save-dev

2017/07/23

Windows 安裝Laravel

先至Composer網站下載Windows安裝檔案
安裝時需指定php.exe所在路徑,指定完成就下一步直到安裝完成


完成後,將php所在資料夾路徑加入至電腦環境變數裡的Path