1. 程式人生 > >Yii2本身自帶實現使用者註冊,驗證,登入

Yii2本身自帶實現使用者註冊,驗證,登入

使用者的註冊和登入

在現在的Web應用中,幾乎每一個應用都會需要使用者註冊,不管是使用的第三方還是自建的註冊登入系統,我們都需要通過某些表單來收集一些必要的使用者資料。這些功能在Yii2之中實現起來並不難,而且有很多種方法,好像很多方法都是比較直接,簡單粗暴。這可能是很多人喜歡Yii的原因,就像很多人喜歡PHP一樣,就是簡單粗暴!

其實在Yii2中,它本身就自帶了一個登入的實現:

但是我們重複去製造這個輪子是因為我們需要一些更加實用性的改善,比如:在註冊的時候,傳送驗證郵箱。這幾乎是每一個Web應用在註冊的時候都會考慮的內容。

如果你安裝的是Yii2 Advanced Application Template

,那麼Yii2其實就把這些功能都寫好了,而且你還會有一個後臺管理的模組。但是我們的教程是基於Yii2's Basic Application Template,而且我提倡大家來動手造一下這個輪子。

帶上我們的作案工具,我們要來造輪子了。

安裝Yii2-User

我們這裡的Yii2-User安裝步驟參照Yii2-User官方安裝文件。我們直接使用composer來進行安裝:

composer require "dektrium/yii2-user:0.9.*@dev"

稍微等待一下,安裝完畢之後就可以進行對應的配置了,我們需要配置的檔案是config/web.php,找到components,然後在與它同級的位置增加一個modules

'components' => [
        // other settings...
    ],
'modules' => [
        'user' => [
            'class' => 'dektrium\user\Module',
            'confirmWithin' => 21600,
            'cost' => 12,
            'admins' => ['admin']
        ],
    ],

這裡還需要將components下面的user部分註釋掉,不然就會一直登入不了:

```
 /* 'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],*/
```

還有最後一步就是執行Yii2-User的migration了,在helloYii/目錄下執行:

php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations

然後你會看到:

果斷yes

Bang,到這裡Yii2-User安裝和配置已經完成了。

配置SwiftMailer

安裝完Yii2-User之後我們先不急著去想怎麼實現登入和註冊(其實很是比較簡單的),我們之前說過的目標是實現使用者在註冊時候傳送驗證郵件的,這裡我們先來配置一下我們的郵箱服務,因為Yii2-User可以直接使用郵箱來進行註冊驗證和密碼找回等功能。在config/web.php找到mailer這個部分:

'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    // send all mails to a file by default. You have to set
    // 'useFileTransport' to false and configure a transport
    // for the mailer to send real emails.
    'useFileTransport' => true,
],

修改成我們下面的這個樣子:

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@app/mailer',
        'useFileTransport' => false,
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.live.com',
            'username' => '[email protected]',
            'password' => 'your-password',
            'port' => '587',
            'encryption' => 'tls',
            ],
    ],

這裡由於我經常使用的是outlook,不要覺得我是奇葩。所以我在這裡使用的是outlook的SMTP配置,各位可以根據自己的需要來進行相應的修改。

開始使用Yii2-User

郵箱配置好了之後,我們就可以開始使用Yii2-User了,首先我們來修改一下我們的導航欄,因為我們想實現的就是我們常常看到的在導航欄的右側的註冊和登入按鈕。在/views/layouts/main.php找到:

echo Nav::widget([
            'options' => ['class' => 'navbar-nav navbar-right'],
            'items' => [
                ['label' => 'Home', 'url' => ['/site/index']],
                [
                    'label' => 'Status',
                    'items' => [
                        ['label' => 'View', 'url' => ['/status/index']],
                        ['label' => 'Create', 'url' => ['/status/create']],
                    ],
                ],
                ['label' => 'About', 'url' => ['/site/about']],
                ['label' => 'Contact', 'url' => ['/site/contact']],
                Yii::$app->user->isGuest ?
                    ['label' => 'Login', 'url' => ['/site/login']] :
                    ['label' => 'Logout (' . Yii::$app->user->identity->username . ')',
                        'url' => ['/site/logout'],
                        'linkOptions' => ['data-method' => 'post']],
            ],
        ]);

上面的啟示就是我們在上一篇文章修改過後的導航欄的程式碼,然後用下面的程式碼進行替換:

$navItems=[
    ['label' => 'Home', 'url' => ['/site/index']],
    ['label' => 'Status', 'url' => ['/status/index']],
    ['label' => 'About', 'url' => ['/site/about']],
    ['label' => 'Contact', 'url' => ['/site/contact']]
  ];
  if (Yii::$app->user->isGuest) {
    array_push($navItems,['label' => 'Sign In', 'url' => ['/user/login']],['label' => 'Sign Up', 'url' => ['/user/register']]);
  } else {
    array_push($navItems,['label' => 'Logout (' . Yii::$app->user->identity->username . ')',
        'url' => ['/site/logout'],
        'linkOptions' => ['data-method' => 'post']]
    );
  }
echo Nav::widget([
    'options' => ['class' => 'navbar-nav navbar-right'],
    'items' => $navItems,
]);


修改完成之後,我們直接訪問:http://localhost:8999/user/register,你將會看到下面的類似頁面:

有沒有覺得很神奇?沒錯Yii2-User幫我們都全部寫好了!然後我們輸入相應的資訊點選註冊,之後就會看到這個資訊提示頁面:

提示新說表明驗證郵箱已經發送,我們登入qq郵箱去看看,果然:

看到這個,相信大家都會很開心,有圖有真相。直接點選郵件的驗證連結,然後就會看到Yii2-User給我們反饋的驗證成功的資訊:

注意右上角,這個時候我們已經登入到應用了,如果點選Logout就會回到登入頁面:

到這裡,註冊登入整個流程就實現完了,不過還有一個我們日常開發經常遇到的情況:忘記密碼。嗯,對於這個情況,Yii2-User直接就提供了這個功能!你可以直接訪問:http://localhost:8999/user/forgot 就可以看到了:

嗯,就這樣,很簡單吧。藉助Yii2-User這個強大的composer package,我們可以輕鬆實現使用者註冊,登入和忘記密碼等各個功能。當然,Yii2-User還有很多特性,我們這裡只是用到了很小一部分,你可以直接到文件中檢視:

最後希望這一篇文章可以幫你解決一些問題。下一步我肯能會說一下使用者許可權控制和管理,因為這裡實現的使用者註冊,所以下一篇顯得是自然而然的。

相關推薦

Yii2本身實現使用者註冊驗證登入

使用者的註冊和登入 在現在的Web應用中,幾乎每一個應用都會需要使用者註冊,不管是使用的第三方還是自建的註冊登入系統,我們都需要通過某些表單來收集一些必要的使用者資料。這些功能在Yii2之中實現起來並不難,而且有很多種方法,好像很多方法都是比較直接,簡單粗暴。這可能是很多

asp.net MVC5如何使用mysql資料庫使用MVC框架中的identity使用者驗證體系

問題如題 現在很多時候,即使是.net專案,我們用的資料庫也未必時是 SQL Server了。 但很多VS 自帶的框架(如MVC 、WebAPI等框架)中的示例自帶的仍然是預設Sql Server的,而且並不一定好改成別的資料庫。這有時候就很苦惱。 比如.

NSIS隱藏窗體標題欄的button(最大化最小化關閉X)

簡單 ini tex call 定義 ongui col 分享 http 這個問題實在八月份逛csdn論壇的時候偶然遇到的,當時比較好奇樓主為啥要隱藏關閉button。就順口問了下,結果樓主已經棄樓。未給出原因,猜著可能是為了做自己定義頁面美化,無法改變按紐外觀之類的,

關於 MongoDB 與 SQL Server 通過本身工具實現數據快速遷移 及 註意事項 的探究

數據遷移工具 文件中 文件導入 原本 修改字段 信息 字符 變化 是否 背景介紹 隨著業務的發展、需求的變化,促使我們追求使用不同類型的數據庫,充分發揮其各自特性。如果決定采用新類型的數據庫,就需要將既有的數據遷移到新的數據庫中。在這類需求中,將SQL Server中的數據

釘釘瀏覽器版本過低導致Object.assign不兼容...

follow save 全局 上線 地址 目的 for promise 命令 最近做了一個移動端項目,提前做完了,上線以後各種沒問題,各種瀏覽器都完美棒棒噠,終於可以給自己加一個雞腿了。 But,PM有天給我說,咳咳,為什麽頁面少了一部分?? 說我的一臉懵逼,然後拿給我看,

使用katalonSpy功能獲取/驗證控件Selector、XPath

verify sta 失敗 sel object 輸入 支持 新手 心得體會 背景 最近剛接手一個katalon編寫的UI自動化項目,頁面最近剛改版,已有用例很多查找元素失敗。了解到katalon元素定位支持xpath,所以直接使用chrome開發者工具打開目標頁面+獲取x

微信的彈出框刪除圖片

此方法用於wx自帶的上傳圖片,然後刪除圖片的場景 deleteImg: function(param) { var index = param.currentTarget.dataset.index; console.log(index); var that = this;

Laravel-開箱登陸註冊和資料填充

Laravel的安裝在這裡就不再敘述了,如果是剛開始學習的同學可以先看下我的:Laravel的安裝 裡面有寫詳細的安裝步驟,包括指定版本的安裝。重申一次,建議使用composer安裝。 寫這篇文章主要是因為在另一篇登入註冊解析裡面發現有的同學初次安裝完laravel之後,並不能很快的

光環到強大商用這個區塊鏈服務你怕麼?

  自中本聰發表“一種點對點的電子現金系統”後,區塊鏈技術漸漸被人們所熱議,使區塊鏈自帶光環並被稱作是繼大型機、個人電腦、網際網路之後計算模式的顛覆性創新。 區塊鏈源於比特幣,是比特幣的底層技術,但其價值又超越了比特幣,它集成了分散式資料儲存、點對點傳輸、共識機制、加密演算法等技術。 具備

Wo Token 錢包出自1Worldblockchain公司高頻量化交易機器人讓您數字資產保值增值。

1Worldblockchain LLC是個金融科技公司,提供一系列的解決方案,給包括企業、金融機構、政府、高科技公司的實質性及多樣化客戶端提供多樣金融服務。1Worldblockchain 公司開發的Wo Token錢包獲得日本neraex老牌交易所1000萬美元投資。錢包

09 實現Django註冊\登入\退出登入(表單)功能

1、概述 在我們瀏覽網頁的時候,經常會碰到對一個網站的註冊,然後用註冊號進行登入,登入後進行退出的操作。當用戶註冊登入網站後,網站的顯示資訊會根據使用者的許可權來設定。本篇主要簡單介紹django自身

XP中的一個祕密武器可以完整清除垃圾檔案

XP中自帶 的一個祕密武器,可以完整清除垃圾檔案  電腦左下角:「開始」>「執行」 輸入:cleanmgr /SAGERUN:99     注意: /前有空格 「清理磁碟」工具會執行,你會發覺多了很多清理選擇,選擇你想要清理的檔案,通常全部都可以刪除,完成你的選擇後再按

android中RadioButton中的的圓圈如何去掉兩種方法一種.xml、一種程式碼中

第一種.xml中 我想大家都知道 android:button="@null"其實這就是簡單的多RadioButton做的一個自定義,null就是給他為空,所以就變相的隱藏掉了它自帶那個圓圈。 重點是第二種的方法,在java程式碼中:RadioButton IB_PullD

流量的幼兒園網站就不用推廣了嗎

在大多數人眼裡,幼兒園網站好像就是一個擺設,沒有多大營銷價值,見慣了各種利用朋友圈給孩子投票這樣吸粉的“伎倆”,在競爭激烈的市場競爭中,幼兒園似乎也避免不了生源的爭奪,在網際網路時代,幼兒園網站被賦予了更多的功能。  凡是網站,想要獲得流量,獲得關注,就離不開網站的優化推廣,

spring的定時任務功能基於註解和xml配置

1、spring的配置檔案 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml

Android呼叫系統的檔案管理器開啟指定路徑

一、開啟系統自帶的檔案管理器 if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { showToast(R.string.msg_

使用本身的指令碼錄製功能錄製指令碼

1.前言 記錄對Jmeter評估研究的過程,本文記錄使用apache網站提供的原Jmeter使用自帶功能進行指令碼錄製。 本文可用於面向B/S WEB應用測試的工程師熟悉Jmeter使用。章節安排按照指令碼設定、場景設定、常看監控的順序組織。 2.錄製指令碼   使用的測試地址:http://demo

JDKkeytool生成SSL證書搭建tomcat+https協議

1、生成伺服器證書:CMD進入JDK安裝目錄:cd c:/"Program Files"/java/jdk1.6.0_43/bin。輸入命令:keytool -genkey -v -alias tomcat -keyalg RSA -keystore F:/ssl/tomca

Springboot的表單驗證操作

flag ltm not val rod pty package col turn 在創建Springboot項目中,我們使用了表單驗證操作,這一操作將極大地簡化我們編程的開發 1.接收數據,以及驗證 @PostMapping("/save") publi

Asp.NET MVC用System.Web方法寫入FormsAuthentication驗證

/// <summary> /// 登入 /// </summary> /// <param name="userId"></param> /// <param name="isKeepLogin">是