2015-08-30 81 views
0

我已經構建了我的第一個Node.js應用程序,該應用程序應該安裝在Shopify商店中。如果你想看看我的實際代碼是什麼樣的(app.js),你可以查看它here。這是非常基本的,所以閱讀並不難。Node.js - 如何使用訪問/授權令牌?

我知道如何驗證安裝應用程序的(繼Shopify說明),但我沒怎麼使用永久access token,一個成功的安裝爲我提供了所有後續請求驗證。

通過後續請求,我指的是呈現應用或請求安裝應用的請求,即使應用已安裝。

現在,我存儲店鋪的名字(這是唯一的)與永久性令牌Shopify將在我數據庫一起。但我不知道這是否是必要的。如果我沒有錯,只需使用瀏覽器的會話就可以做到嗎?但我該怎麼做?我怎麼在每次請求到來時使用這個令牌來檢查它是否有效?

謝謝任何​​幫助/建議!

下面的代碼是那種什麼my actual code樣子,以便給你的我的問題是什麼的想法表示:

db.once('open', function(callback) 
{ 
    app.get('/', function (req, res) 
    { 
     var name = getNameFrom(req); 

     if (existsInDB(name) && tokenExistsInDBfor(name)) 
     { 
     res.redirect('/render'); 

     /* 
      Is checking that the shop (along with a permanent token) 
      exists in my DB enough ? 
      Shouldn't I check whether the current request comes with 
      a token that is equal to the one in my DB ? 
      What if the token received with this request is different  
      from the one stored in my DB ? 
     */ 

     } 
     else res.redirect('/auth'); 
    }); 

    app.get('/auth', function (req, res) 
    {  
     if (authenticated(req)) 
     { 
      var token = getPermanentToken(); 
      storeItInDB(nameFrom(req), token); 
      res.redirect('/render'); 

      /* 
      aren't I supposed to do anything more 
      with the token I've received ? send it 
      back/store it in the browser session as well maybe? 
      is storing it in the db necessary ? 
      */ 
     } 
    }); 

    app.get('/render', function (req, res) 
    { 
     /* 
     How do I check that this request is coming 
     from an authorised shop that has the necessary token ? 
     Simply checking my DB will not do 
     because there might be some inconsistency correct ? 
     */ 

     res.sendFile(*file that will build app on the client*); 
    }); 
}); 

回答

1

獲取access token從Shopify是一次時間過程。

access tokenshop's name保存在您的數據庫中,並且還基於某種算法生成並保存'auth token'。將生成的授權令牌返回給客戶端。確保客戶端在每個請求中都發送此身份驗證令牌。

現在,當客戶端擊中你的服務器驗證身份驗證令牌;一旦通過驗證,就可以使用適當的「訪問令牌」和商店名稱致電Shopify API。

認證流程可能如下:

  • 從Shopify獲得訪問令牌
  • 生成令牌(我指此爲驗證令牌)的Shopify店,是指this
  • 現在保存shopify的訪問令牌,將商店名稱和生成的令牌Shoporder到數據庫
  • 現在將您生成的令牌發送給客戶端(保存在cookie或本地存儲中)

驗證流程:

  • 客戶擊中了你的服務器的身份驗證令牌
  • 驗證在你的數據庫這個身份驗證令牌,並獲得訪問令牌和店鋪名稱獲取數據爲身份驗證令牌
  • 現在做使用此訪問令牌和店鋪名稱

希望這種方法有助於

+0

感謝您的回覆奇拉格調用Shopify API。儘管如此,我並不真正理解'access token'和'auth token'之間的區別。我在Shopify上得到的所有東西都是一個「臨時標記」,然後我換成了「永久標記」,這是我在DB中保存的一個商標名稱。所以我不知道如何獲得你所指的'auth token'。我也不知道如何將'token'返回給客戶端,就像你所建議的一樣,我不知道如何在客戶端發出的每個請求中都存在'check token'。我在OP中包含了一個到我的實際代碼的鏈接,以防有所幫助。 –

+0

如果在客戶端和服務器之間移動'永久令牌'不是好的做法,那我該怎麼做呢?我如何生成你正在談論的'auth token',我該怎麼處理呢? –

+1

編輯我的答案詳細的工作流程 –