亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

yii如何實現注冊頁面

發布時間:2021-01-13 14:08:22 來源:億速云 閱讀:154 作者:小新 欄目:編程語言

這篇文章主要介紹yii如何實現注冊頁面,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

注冊

在advanced模板中,進入frontend/index.php?r=site%2Fsignup頁面,可以看到框架的注冊頁面

yii如何實現注冊頁面

填寫完Username、Email和Password后點擊Signup后,如果格式不對,frontend/models/SignuForm中的rules()函數會進行初步驗證,所有格式正確后,數據傳輸到 frontend/controllers /SiteController中的 actionSignup()函數中,函數加載用戶輸入的注冊信息,在frontend/models/SignupForm中的signup()函數,

以下引用的文字為解釋函數中的具體細節,不閱讀不影響整體,因為沒有折疊文字功能,故采用引用的方法,下同

if (!$this->validate()) {
  return null;
}

signup() 函數首先調用 yii2/base/Model中的validate() 函數進行驗證
第一步,清除使用frontend/models/SignuForm中的rules()函數在用戶輸入時的錯誤信息

if ($clearErrors) {
  $this->clearErrors();
}

第二步,beforeValidate()函數觸發beforeValidate事件并返回true

第三步,設置scenario,默認是default

第四步,因為這里的$attributeNames為null,

$attributeNames = $this->activeAttributes();

執行后返回

array(3) { [0]=> string(8) "username" [1]=> string(5) "email" [2]=> string(8) >"password" }

第五步,$this->getActiveValidators()會得到frontend/models/SignuForm中的rules()中11條驗證規則給validateAttributes()進行驗證

第六步,執行afterValidate()函數觸發afterValidate事件

最后 如果所有驗證都通過,$this->hasErrors()為false,所以函數最后返回true

我們看一下數據表user的字段

yii如何實現注冊頁面

用戶輸入了username、password和email,Yii2框架是如何生成其他的字段的呢,先看password_hash,在SignupFrom中的signup函數中的密碼生成是setPassword函數,該函數在common/models/User中,setPassword函數調用了yii2/base/Security中的每一條規則generatePasswordHash函數。

if (function_exists('password_hash')) {
  /** @noinspection PhpUndefinedConstantInspection */
  return password_hash($password, PASSWORD_DEFAULT, ['cost' => $cost]);
}

如果有,就使用password_hash函數進行加密,如果PHP沒有password_hash函數,就使用crypt函數加密,初步判斷應該是為了兼容PHP低于5.5的版本,畢竟大于5.5的版本才開始有password_hash函數

common/models/User的signup()函數在對password加密后,就會繼續生成一個auth key,auth key是當用戶在登錄的時候點擊 remember me的時候的驗證信息,

auth key生成的方法也是在yii2/base/Security中的generateRandomString,generateRandomString調用generateRandomKey函數,如果你的PHP版本為是5.2~5.6或者是7,那就是用random_bytes生成一個32個字節的字符串,如果不是,當你用的系統時windows并且安裝了OpenSSL,就會調用openssl_random_pseudo_bytes函數生成,如果你未安裝OpenSSL,就會使用mcrypt_create_iv生成。

如果你使用的系統不是windows,就需要調用/dev/urandom,FreeBSD系統特殊,會調用/dev/random,然后調用stream_set_read_buffer方法生成8字節的字符文件,生成后,通過fread函數讀取該文件中的32個字節,然后返回該數據。
password_reset_token在用戶注冊的時候是為空的,當用戶忘記密碼在登錄頁面點擊reset it 后生成的,用來給用法發送郵件后重置密碼時進行驗證。

status 在common/models/User中定義的

const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;

用戶注冊時rules中的status默認為為10,
created_time和updated_time也是在common/models/User中的behaviors()函數中生成

用戶的數據驗證合格,加上框架生成的數據,然后存儲進數據的user表里。

以上是“yii如何實現注冊頁面”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

yii
AI

东方市| 盱眙县| 临湘市| 清徐县| 河北省| 雅安市| 泗洪县| 武川县| 阆中市| 开化县| 碌曲县| 海城市| 龙里县| 竹北市| 满洲里市| 淮阳县| 聂荣县| 台北市| 池州市| 洪湖市| 寿光市| 湘乡市| 深圳市| 普兰县| 巫山县| 昌乐县| 庆云县| 多伦县| 河北区| 安化县| 赣榆县| 当雄县| 分宜县| 祁连县| 莱西市| 武安市| 会同县| 新巴尔虎右旗| 平谷区| 雅安市| 库车县|