国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
核心要點
創(chuàng)建應用
數(shù)據(jù)庫設(shè)置
構(gòu)建身份驗證
遷移
修改登錄鏈接
創(chuàng)建魔法登錄控制器、視圖和路由
首頁 後端開發(fā) php教程 讓殺死密碼!魔術(shù)登錄鏈接到救援!

讓殺死密碼!魔術(shù)登錄鏈接到救援!

Feb 10, 2025 pm 12:27 PM

告別密碼煩惱,擁抱安全便捷的無密碼登錄!本文將指導您如何在Laravel應用中實現(xiàn)基於一次性鏈接的無密碼登錄系統(tǒng),提升安全性並簡化用戶體驗。

Let's Kill the Password! Magic Login Links to the Rescue!

本文由Younes Rafie和Wern Ancheta審核。感謝所有SitePoint的同行評審員,使SitePoint的內(nèi)容達到最佳狀態(tài)!


身份驗證技術(shù)不斷發(fā)展,從傳統(tǒng)的郵箱-密碼組合,到社交登錄,再到如今的無密碼登錄(更準確地說是“僅郵箱”登錄)。無密碼登錄系統(tǒng)通過向用戶郵箱發(fā)送登錄鏈接來驗證身份。

Let's Kill the Password! Magic Login Links to the Rescue!

無密碼登錄流程如下:

  1. 用戶訪問登錄頁面;
  2. 輸入郵箱地址並確認;
  3. 系統(tǒng)向郵箱發(fā)送登錄鏈接;
  4. 點擊鏈接後,用戶被重定向回應用並登錄;
  5. 鏈接失效。

如果您忘記應用密碼但記得註冊郵箱,此方法非常實用。 Slack等應用也採用了這種技術(shù)。本教程將演示如何在Laravel應用中實現(xiàn)此系統(tǒng)。完整代碼請見此處。

核心要點

  • 摒棄密碼:採用基於一次性使用URL的“魔法登錄鏈接”,實現(xiàn)簡單安全的無密碼認證。
  • 用戶友好的設(shè)置:利用預定義命令和少量修改,即可輕鬆在Laravel應用中實現(xiàn)此系統(tǒng)。
  • 增強的安全性:魔法登錄鏈接消除了傳統(tǒng)密碼系統(tǒng)中常見的漏洞,例如弱密碼和網(wǎng)絡(luò)釣魚攻擊。
  • 靈活性和控制:用戶仍可以選擇使用傳統(tǒng)密碼登錄,兼顧靈活性與安全性。
  • 高效的令牌管理:系統(tǒng)自動處理令牌過期和驗證,確保令牌被正確使用且不會長期有效。

創(chuàng)建應用

首先,創(chuàng)建一個新的Laravel應用。本教程使用Laravel 5.2:

composer create-project laravel/laravel passwordless-laravel 5.2.*

如果您已有包含用戶和密碼的Laravel項目,無需擔心,我們不會修改正常的身份驗證流程,而是在其之上添加一層。用戶仍可以選擇使用密碼登錄。

數(shù)據(jù)庫設(shè)置

在運行遷移之前,需要設(shè)置MySQL數(shù)據(jù)庫。

打開根目錄下的.env文件,輸入主機名、用戶名和數(shù)據(jù)庫名稱:

<code>[...]
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=passwordless-app
DB_USERNAME=username
DB_PASSWORD=
[...]</code>

如果您使用的是Homestead Improved box,數(shù)據(jù)庫/用戶名/密碼組合為homestead, homestead, secret。

構(gòu)建身份驗證

Laravel 5.2版本引入了一項很棒的功能:只需一條命令即可添加預製身份驗證層。讓我們執(zhí)行此操作:

composer create-project laravel/laravel passwordless-laravel 5.2.*

此命令會構(gòu)建身份驗證所需的一切,即視圖、控制器和路由。

遷移

在database/migrations目錄中,可以看到生成的Laravel應用包含創(chuàng)建users表和password_resets表的遷移文件。

我們不會修改任何內(nèi)容,因為我們?nèi)匀幌M麘脫碛姓5纳矸蒡炞C流程。

要創(chuàng)建表,請運行:

<code>[...]
DB_CONNECTION=mysql
DB_HOST=localhost
DB_DATABASE=passwordless-app
DB_USERNAME=username
DB_PASSWORD=
[...]</code>

現(xiàn)在可以運行應用,用戶應該能夠使用導航欄中的鏈接註冊和登錄。

修改登錄鏈接

接下來,我們將修改登錄鏈接,使其重定向到自定義登錄視圖,用戶在該視圖中將僅提交郵箱地址而無需密碼。

導航到resources/views/layouts/app.blade.php。在那裡可以找到導航欄部分。將包含登錄鏈接的行(在檢查用戶是否已註銷的條件語句下方)更改為:

resources/views/layouts/app.blade.php

php artisan make:auth

當未登錄的用戶嘗試訪問受保護的路由時,他們應該被帶到新的自定義登錄視圖,而不是正常的登錄視圖。此行為在authenticate中間件中指定。我們需要對其進行調(diào)整:

app/Http/Middleware/Authenticate.php

php artisan migrate

請注意,在else塊中,我們已將重定向更改為指向login/magiclink,而不是正常的login。

創(chuàng)建魔法登錄控制器、視圖和路由

下一步是在Auth文件夾中創(chuàng)建MagicLoginController:

[...]
@if (Auth::guest())
<li><a href="http://www.miracleart.cn/link/9964364bfd2b38643a0b41b981c01f60'/login/magiclink') }}">Login</a></li>
<li><a href="http://www.miracleart.cn/link/9964364bfd2b38643a0b41b981c01f60'/register') }}">Register</a></li>
[...]

然後是顯示自定義登錄頁面的路由:

app/Http/routes.php

class Authenticate
{
[...]
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->guest()) {
        if ($request->ajax() || $request->wantsJson()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login/magiclink');
        }
    }

    return $next($request);
}
[...]

讓我們更新MagicLoginController以包含show操作:

app/Http/Controllers/Auth/MagicLoginController.php

php artisan make:controller Auth\MagicLoginController

對於新的登錄視圖,我們將藉用正常的登錄視圖,但刪除密碼字段。我們還將表單的post URL更改為指向/login/magiclink。

讓我們在views/auth文件夾中創(chuàng)建一個magic文件夾來保存此新視圖:

[...]
Route::get('/login/magiclink', 'Auth\MagicLoginController@show');

讓我們將新創(chuàng)建的視圖更新為:

resources/views/auth/magic/login.blade.php

class MagicLoginController extends Controller
{
    [...]
    public function show()
    {
        return view('auth.magic.login');
    }
    [...]
}

我們將保留使用密碼登錄的選項,因為用戶可能仍然選擇密碼登錄。因此,如果用戶點擊導航欄中的登錄,他們將看到如下所示的登錄視圖:

Let's Kill the Password! Magic Login Links to the Rescue!

剩餘部分由於篇幅限制,無法全部展開,但基本思路如下:

  • 生成並關(guān)聯(lián)令牌: 創(chuàng)建路由和控制器方法來處理登錄表單的提交操作,驗證郵箱地址,為用戶生成令牌,並將令牌與用戶關(guān)聯(lián)。使用 str_random() 生成隨機令牌,並將其存儲在數(shù)據(jù)庫中。
  • 發(fā)送令牌郵件:UserToken 模型中添加方法,使用 Laravel 的郵件功能發(fā)送包含登錄鏈接的郵件。鏈接應包含令牌、郵箱地址和記住我的值。 使用 Mail::raw() 發(fā)送純文本郵件,或創(chuàng)建郵件視圖以增強郵件外觀。
  • 令牌驗證和身份驗證: 創(chuàng)建路由和控制器方法來處理登錄鏈接的點擊操作。使用路由模型綁定獲取令牌,驗證令牌是否過期以及是否屬於提交的郵箱地址。使用 Carbon 庫來檢查令牌的過期時間。驗證成功後,使用 Auth::login() 登錄用戶,並刪除已使用的令牌。

通過以上步驟,您就可以在 Laravel 應用中實現(xiàn)一個安全可靠的無密碼登錄系統(tǒng),為用戶提供更便捷、更安全的登錄體驗。 請記住根據(jù)您的實際需求調(diào)整令牌過期時間和其他設(shè)置。 完整的代碼和更詳細的步驟,請參考您提供的完整代碼鏈接。

以上是讓殺死密碼!魔術(shù)登錄鏈接到救援!的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴格程度。 ==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles