TYEYDY

快樂生活 | 身體健康

0%

登入驗證時的錯誤訊息

1
This password does not use the Bcrypt algorithm.(0)

原因:

由於舊的資料表的雜湊方式為 md5,但同時存在新的資料表使用bcrypt雜湊,所以在驗證時會出現錯誤。

閱讀全文 »

一般情況下

驗證的方法

  • Controller
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $validation = $request->validated();

    $credentials = [
    'email' => $validation['phone'],
    'password' => $validation['password'],
    ];

    if (!Auth::guard('member')->attempt($credentials)) {
    throw AuthorizeException::loginFail();
    }
閱讀全文 »

Laravel 11 有異動許多地方,RouteServiceProvider、AuthServiceProvider… 都統一在AppServiceProvider中處理

新增一個會員的驗證機制來作為範例

  • config/auth.php
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    'guards' => [
    'web' => [
    'driver' => 'session',
    'provider' => 'users',
    ],
    'member' => [
    'driver' => 'session',
    'provider' => 'members',
    ],
    ],

    'providers' => [
    'users' => [
    'driver' => 'eloquent',
    'model' => env('AUTH_MODEL', App\Models\User::class),
    ],

    'members' => [
    'driver' => 'member',
    'model' => App\Models\Member::class,
    ],
    ],
閱讀全文 »

Laravel Test 單一測試使用多個使用者

遇到的問題

測試新增兩位會員,使用Laravel Sanctum 驗證方式,測試取得會員資料

單獨一個使用者測試沒有問題,但兩位使用者會驗證失敗,會是相同的會員

第二筆回傳的會員資料會是第一筆會員資料

失敗的測試程式碼

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
31
public function test_profile() {
// 建立會員
$member1 = Member::factory()->create();
$token = $member1->createToken('test')->plainTextToken;
$header1['Authorization'] = 'Bearer ' . $token;

$member2 = Member::factory()->create();
$token = $member2->createToken('test')->plainTextToken;
$header2['Authorization'] = 'Bearer ' . $token;

// 取得會員資料
$res = $this->json('get', route('member.profile'), [], $header1)
->assertOk()
->assertJson([
'code' => '0',
]);
$content = json_decode($res->getContent(), true);

// testing fail
$this->assertEquals($member->phone, $content['data']['profile']['phone']);

$res = $this->json('get', route('member.profile'), [], $header1)
->assertOk()
->assertJson([
'code' => '0',
]);
$content = json_decode($res->getContent(), true);

// testing pass
$this->assertEquals($member->phone, $content['data']['profile']['phone']);
}
閱讀全文 »

問題

安裝Linux php7.4時,發現Ubuntu 22.04不支援php7.4

1
$ apt-get install php7.4-fpm -y

Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
Package php7.4 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package ‘php7.4’ has no installation candidate

解決方法

安裝舊版的套件包

1
2
$ add-apt-repository ppa:ondrej/php && apt update -y
$ update-alternatives --config php

參考網站:

PHP ZipArchive 壓縮檔案數量不正確

問題

上傳了一個縮檔檔 (file.zip),內包含兩個圖片

使用程式碼解壓縮,逐一上傳到伺服器

1
2
3
4
$zip = new \ZipArchive();
for ($i = 0; $i < $zip->numFiles; $i++) {
// 上傳檔案
}

但發現 $zip->numFiles 的數量不正確,有四個檔案

查詢所有的$ file_name,發現有兩個檔案是 __MACOSX/._ 開頭的檔案

1
2
3
4
$zip = new \ZipArchive();
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
}
1
2
3
4
local.INFO: stat [{"name":"pic1.jpg","index":0,"crc":386404580,"size":42992,"mtime":1714363176,"comp_size":38074,"comp_method":8,"encryption_method":0}]
local.INFO: stat [{"name":"__MACOSX/.pic1.jpg","index":1,"crc":44379887,"size":340,"mtime":1714363176,"comp_size":197,"comp_method":8,"encryption_method":0}]
local.INFO: stat [{"name":"pic2.jpg","index":2,"crc":1810608204,"size":13140,"mtime":1714361602,"comp_size":9669,"comp_method":8,"encryption_method":0}]
local.INFO: stat [{"name":"__MACOSX/.pic2.jpg","index":3,"crc":2480374228,"size":340,"mtime":1714361602,"comp_size":214,"comp_method":8,"encryption_method":0}]

__MACOSX/ 是一個在 macOS 系統中創建的 zip 檔案可能會包含的特殊目錄。當你在 macOS 中使用內建的壓縮工具來創建 zip 檔案時,系統會自動在 zip 檔案中創建一個名為 __MACOSX/ 的目錄。

解決方法

判斷開頭為 __MACOSX/._ 的檔案,不進行上傳

1
2
3
4
5
6
7
8
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
if (strpos($entry, '__MACOSX/') === 0) {
// This is a __MACOSX/ entry, skip it
continue;
}
// 上傳檔案
}

以下幾種方法可以將 PDF 顯示在 網頁中

embed

1
2
<embed src="http://example.com/the.pdf" width="500" height="375" 
type="application/pdf">
  • 好處:鑲嵌簡單
  • 壞處:在手機瀏覽器中顯示會有問題,如果可以使用另開視窗顯示也是一種方法
閱讀全文 »