欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          yii怎么搞注冊

          yii怎么搞注冊

          注冊

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

          yii怎么搞注冊

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

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

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

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

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

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

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

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

          $attributeNames = $this->activeAttributes();

          執(zhí)行后返回

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

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

          第六步,執(zhí)行afterValidate()函數(shù)觸發(fā)afterValidate事件

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

          我們看一下數(shù)據(jù)表user的字段

          yii怎么搞注冊

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

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

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

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

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

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

          status 在common/models/User中定義的

          const STATUS_DELETED = 0; const STATUS_ACTIVE = 10;

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

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

          推薦學習:yii框架

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號