[英]NodeJS + Express + Passport + IIS
我正在部署使用Windows身份驗證的node + express應用程序。 我為此遵循了PassportJS windows-auth文檔。 但我面臨錯誤=>
處理請求時,iisnode遇到錯誤。
HRESULT:0x2 HTTP狀態:500 HTTP subStatus:1002 HTTP原因:內部服務器錯誤您收到此HTTP 200響應,因為system.webServer/iisnode/@devErrorsEnabled配置設置為“true”。
除了node.exe進程的stdout和stderr的日志之外,請考慮使用調試和ETW跟蹤來進一步診斷問題。
node.exe進程生成到stderr的最后64k輸出如下所示:
應用程序拋出未捕獲的異常並終止:錯誤:身份驗證策略必須在Object的Passport.use(C:\\ Workspace \\ Trial \\ node_modules \\ passport \\ lib \\ passport \\ index.js:51:20)中具有名稱。 (C:\\ Workspace \\ Trial \\ server.js:7:10)在Module._compile(internal / modules / cjs / loader.js:689:30)的Object.Module._extensions..js(internal / modules / cjs) /loader.js:700:10)在Function.Module的tryModuleLoad(internal / modules / cjs / loader.js:538:12)的Module.load(internal / modules / cjs / loader.js:599:32)。 _load(internal / modules / cjs / loader.js:530:3)在Module.require(internal / modules / cjs / loader.js:637:17)at require(internal / modules / cjs / helpers.js:22: 18)在對象。 (C:\\ Program Files(x86)\\ iisnode \\ interceptor.js:210:1)
server.js
<configuration>
<system.webServer>
<iisnode promoteServerVars="LOGON_USER" />
<handlers>
<add name="iisnode" path="server.js" verb="*" modules="iisnode" />
</handlers>
<rewrite>
<rules>
<rule name="sendToNode">
<match url="/*" />
<action type="Rewrite" url="server.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
<system.web>
<authentication mode="Windows" />
</system.web>
</configuration>
web.config中
var express = require('express');
var app = express();
var passport = require('passport');
var WindowsStrategy = require('passport-windowsauth');
passport.use(function(profile, done){
User.findOrCreate({ waId: profile.id }, function (err, user) {
done(err, user);
});
});
app.get('/NodeTrialLogon/', function (req, res) {
res.send('Express is workin on IISNode!');
});
app.get('/NodeTrialLogon/express-passport',
passport.authenticate('WindowsAuthentication'),
function (req, res){
res.json(req.user);
});
app.listen(process.env.PORT);
請幫忙。 我在IIS中啟用了Windows身份驗證,並禁用了所有其他形式的身份驗證。
好像你導入了WindowsStrategy但從未使用它。 你可以嘗試以下(如本GitHub問題所示 )
passport.use(new WindowsStrategy({
integrated: true
},
function(profile, done) {
User.findOrCreate({ waId: profile.id }, function (err, user) {
done(err, user);
});
}
));
然后你也可以給你的策略命名,作為passport.use()
的第一個參數。
passport.use('MyAuthStrategy', new WindowsStrategy(
// ...
));
然后在經過身份驗證的路由中指定此名稱
passport.authenticate('MyAuthStrategy')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.