首頁 >php框架 >YII >yii怎麼搞註冊

yii怎麼搞註冊

尚
原創
2019-12-16 10:22:161988瀏覽

yii怎麼搞註冊

註冊

在advanced範本中,進入frontend/index.php?r=site/signup頁面,可以看到框架的註冊頁面

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框架

以上是yii怎麼搞註冊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn