關於多字段(第三方登陸)字段設計的解決

衆所周知,一個成熟的網站必然是支持多種登陸方式的。市場上固然常見的就是有相似於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

相關文章
相關標籤/搜索