Palantir開源項目 【第一章節 -- SF社區成員打造】

image.pngimage.png

項目立項於2019年10月17日

GitHub倉庫地址前端

第一章節


1、Redis鑑權,持久化Session存儲的環境準備


操做系統:Mac osios

全局安裝Redis,MongoDBgit

安裝成功後,命令行輸入github

redis-server

啓動Redis服務 Redis默認佔用端口6379ajax

MongoDB默認端口是27017redis

安裝Node.jsRestFul服務須要的依賴數據庫

connect-redis     //鏈接redis

cookie-parser     //cookie解析

express                //Node.js框架

express-session //express的session存儲庫

redis                    //redis

等依賴express

2、服務端代碼編寫


鑑權的思路:

密碼密文傳輸,存儲json

利用Redis進行持久化存儲Sessionaxios

須要寫入數據庫的內容能夠集中式寫入

沒有儲存session信息的,不能訪問任何接口

使用pm2啓動Node.js服務,保證服務端的健壯性

每次前端會發送請求是否免密碼登錄,前往Redis拉取數據鑑定

例如免登錄鑑權的路由:

app.get('/authentication', (req, res) => {
  const result = req.session;
  if (result) {
      result.login && res.send(JSON.stringify({ code: 0, data: '免登錄 ' }));
      return;
  }
  res.send(JSON.stringify({ code: 1, data: '須要密碼登錄 ' }));
  return;
});

完成一個需求,先把總體架構圖看明白,再把流程圖畫出來,就成功了一半

上面的路由比較簡單,若是這我的登錄過,持久化存儲在服務端Session信息中的logintrue,那麼就不須要密碼登錄,前端給予控制路由便可。

登錄路由的思路:


每次登錄,若是沒有的username自動註冊

前端作帳戶密碼的格式化檢測

後端只負責檢測密碼是否正確、是否首次登錄等(考慮到高併發)

帳戶密碼能夠用key-value形式存儲在Redis中(密碼都是密文)

僞代碼以下:

redisClient.get(username, (err, value) => {
    if (value && password !== value) {
      res.send(JSON.stringify({ code: 2, data: '密碼錯誤' }));
      return;
    }
    if (!req.session['login' && !value]) {
      redisClient.set(username, password);
      req.session['login'] = { username, login: true, password };
      res.send(JSON.stringify({ code: 0, data: '登錄成功' }));
      return;
    }
    res.send(JSON.stringify({ code: 0, data: '歡迎回來' }));

3、服務部署


因爲咱們項目須要用到session持久化存儲,可是session其實本質利用了Cookie傳輸,並且存在跨域 因此須要在axio、Node.js服務端配置容許Cookie跨域

Axios

axios.defaults.withCredentials = true;

服務端僞代碼:

app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', 'http://localhost:5000');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With');
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS');
  res.header('X-Powered-By', ' 3.2.1');
  res.header('Content-Type', 'application/json;charset=utf-8');
  res.header('Access-Control-Allow-Credentials', 'true');
  next();
});

上面項目的代碼已經編寫大體完畢,下面須要部署到阿里雲服務器

首先購買一臺輕量級服務器,選擇Node.js環境

Node.js代碼經過蘋果電腦自帶的ftp傳輸到阿里雲

輸入密碼鑑權後,

首先輸入put

而後拖入你的文件到命令行中,而後設置在阿里雲服務器中的文件路徑,回車。便可正常上傳

以後在Mac自帶的ssh命令行工具遠程鏈接,啓動Node.js服務

修改Nginx配置,反向代理80端口--->Node.js的服務監聽窗口

重啓Nginx便可訪問

至此,外網已經正常訪問,接口調用正常

4、前端免密登錄、路由鑑權

根組件第一次被渲染時候發送ajax請求

const result = await authentication();
          if (result.code === 0) {
            alert('免登錄');
            this.props.history.replace('/video');
          }
若是有返回狀態碼 0 ,便可免登錄

5、前端用戶名,密碼格式化校驗

客戶端是一我的用,後端是一個接口不少人用

上面這句話時刻記着,若是校驗不經過,那麼就不該該有發送請求或作出某種損耗傳輸、耗時操做的能力

固然,咱們項目不使用任何UI組件庫,純原生開發,包括後面的通訊也是使用同樣,使用TCP長鏈接傳輸

6、更新一次技術架構流程圖

目前RestFul風格的服務端接口,已經部署。後面是長鏈接、靜態資源服務器的代碼部署到另一臺服務器上,而後經過GRPC+PB協議調用~

歡迎加入咱們的微信羣,關注咱們的微信公衆號:前端巔峯

也歡迎在下方給咱們贊助,開源不易,歡迎Star支持

相關文章
相關標籤/搜索