衆所周知,一個成熟的網站必然是支持多種登陸方式的。市場上固然常見的就是有相似於github、微博、qq、微信登陸等。git
因此這些天,我會一一根據這些功能進行實操。昨天完成了微博登陸,今天講一下字段設計的問題github
一、字段如何合理分開數據庫
首先,假設的字段以下:緩存
固然,以上的只是簡單的,當依舊如此,也顯得字段很是多了。 在 數據庫 設計原則中必須有隔離性,大量的字段存在對索引很是不友好,容易形成沒必要要的消耗服務器
根據重要性區別:微信
用戶名、密碼、通訊方式(如做爲登陸字段存在的話可存在)、登陸字段1、登陸字段二session
以上,足以知足在登陸條件下的必須,其餘的經過關聯查詢,能夠垂手可得的獲得函數
關於地址的設計網站
必須將地址另作一張表,不能用戶信息共存,地址是一對多的形式存在,能夠經過中間表進行關聯或者直接關聯。加密
二、 如何有效性的解決登陸字段的問題呢
首先,合理共同使用公共代碼。
公共代碼有哪些呢?
第一步: 獲取當前的字段進行用戶查詢,密碼對比,取得登陸驗證
/** * 返回登陸的字段類型 * * @param $value * @return bool|mixed|string */ function checkParamType($value) { // 是否郵箱匹配 if( filter_var($value,FILTER_VALIDATE_EMAIL) ) { return 'email'; } // 判斷是否手機匹配 $res = filter_var($value,FILTER_CALLBACK,[ 'options' => function ($value){ if( preg_match('/^1[34578]\d{9}$/',$value) ) { return 'phone'; } } ]); return is_null($res) ? false : $res; }
第二步:解決登陸密碼校驗的問題
我這裏將獲取用戶和密碼校驗分離開來,經過字段查詢到用戶,在進行密碼校驗;未查找到,直接返回沒有用戶
... public static function store(LoginRequest $request) { $name = $request->name; $password = $request->password; $field = checkParamType($name) ? checkParamType($name) : 'name' ; if( !$user = User::getUserInfo($name,$field) ) { session()->flash('status','用戶不存在'); return redirect()->back(); } if( !$user = self::checkPassword($user,$password) ){ session()->flash('status','密碼錯誤'); return redirect()->back(); } \Auth::login($user); return redirect('/'); } ... public static function checkPassword($user, $pwd) { // 加密對比 if( $user->password === eny($pwd,$user->salt)) { return $user; } return false; } ...
註冊我採用的是,當第三方登陸受權登陸後,直接給與登陸權限。
註冊用戶,註冊後跳轉到登陸頁面
我採用了可 郵箱 可手機號碼的登陸方式
1) 獲取驗證碼
第一步先,用戶須要填寫郵箱,點擊發送驗證碼按鈕,發送得到驗證碼。 服務器端收到郵箱後生存緩存有效期,將用戶的郵箱寫入緩存,同時發送郵箱 用戶收到郵箱的驗證碼,寫入註冊字段 提交字段,驗證相關數據的有效性
短信接口採用的騰訊雲平臺
原創:轉載請聯繫我 1562135624@qq.com