2014-11-04 42 views
1

我是SailsJS的新手,我想問專家的意見,我的實施是否可以。在SailsJS的passport authentication package的幫助下,我能夠獲得某種認證。Sails JS護照認證製作策略層無用?

/controller/members.js:

module.exports = { 
    //deny all non authenticated users from accessing this controller 
    '*':function(req,res,next){ 
    if(!req.user){ 
     res.view(403); 
    }else{ 
     next(); 
    } 
    }, 
    //once user is authenticated through passport, it is redirected here 
    'welcome':function(req,res){ 
    res.view(); 
    }, 
    //when user clicks logout 
    'logout':function(req,res){ 
    req.logout(); 
    res.redirect("/login"); 
    }, 
}; 

然而,正如你可以從這個看到,進入策略控制器本身內編碼。我根本不使用策略。那麼在包的幫助下,SailsJS中的策略層是完全沒有用的?這是實施passportJS的正確方式嗎?糾正我,如果我錯了,我想我絕對是。

回答

0

要在使用護照執行身份驗證時使用策略,您必須將它們配置爲Express中間件(在config/express.js中),而不是將它們添加爲控制器。

看看這個項目,看看它是如何做:

Sails Social Auth

+0

我想用由kasperisager提供的包,因爲它具有「魔力」它將所有登錄方法(通過社交)捆綁在一起並保留單個用戶標識。 – holyxiaoxin 2014-11-04 08:55:25

+0

對不起。沒有關於這個特定的npm包的線索。爲什麼不嘗試在Github回購中提出問題? – amarprabhu 2014-11-08 09:16:53

1

您應該能夠實現上述使用策略來代替。如果你創建了一個名爲,比如說政策,isAuthenticated.js,你可以從控制器移到您的規則到其中:

module.exports = function(req, res, next) { 
    if(!req.user){ 
    res.view(403); 
    } else { 
    next(); 
    } 
}; 

(並刪除你的控制器中的「*」的方法)。然後,您可以指定「isAuthenticated」作爲一項政策在配置/ policies.js文件,並從那裏,而不是控制訪問:

module.exports.policies = { 
    members: { 
    '*':  'isAuthenticated', 
    'welcome': true, 
    'logout': true 
    } 
}