9

nodejs、everyauthなどは初めてです。すべての認証で問題が発生しています。私の見解では、everyauthオブジェクトにアクセスすると、「everyauthisnotdefined」というエラーが発生します。ただし、oauthフロー自体はeveryauthで正常に機能します。詳細は次のとおりです。

エントリポイント-app.js

var express = require('express');
var everyauth = require('everyauth');
everyauth.debug = true;
var app = express();


everyauth['37signals']
  .appId('e6e76726501abf1b5627fe854b384ef8d62d7a55')
  .appSecret('7c6891f46cb19aaf1831785968630ed4a1b3c342')
  .findOrCreateUser( function (sess, accessToken, accessSecret, _37signalsUser) {
  //code to handle find or create
}
  .redirectPath('/');

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.cookieParser());
  app.use(express.session({ secret: 'foobar' }));
  app.use(express.bodyParser());
  app.use(everyauth.middleware());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
  everyauth.helpExpress(app);
});




app.configure('development', function(){
  console.log('inside development configure');
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
  app.use(express.errorHandler()); 
});

app.get('/', function (req, res) {
  console.log('everyauthloggedin='+ everyauth.loggedIn); // everyauth.loggedIn is undefined
    res.render('home');
});

home.jade

if(!everyauth.loggedIn) // get everyauth is not defined
    h2 Not authenicated 
else
    h2 Authenicated
    p= JSON.stringify(everyauth['37signals'].user)  

インストールされているノードモジュール、

highrise@0.0.1c:\dev\misc\hge\highrise
├─┬ everyauth@0.2.34
│ ├─┬ connect@2.3.9
│ │ ├── bytes@0.1.0
│ │ ├── cookie@0.0.4
│ │ ├── crc@0.2.0
│ │ ├── formidable@1.0.11
│ │ ├── fresh@0.1.0
│ │ ├── qs@0.4.2
│ │ └─┬ send@0.0.3
│ │   ├── mime@1.2.6
│ │   └── range-parser@0.0.4
│ ├── debug@0.5.0
│ ├── node-swt@0.1.1
│ ├── node-wsfederation@0.1.1
│ ├── oauth@0.9.8
│ ├── openid@0.4.2
│ ├── request@2.9.203
│ └─┬ xml2js@0.1.14
│   └── sax@0.4.2
├─┬ express@3.0.0rc3
│ ├── commander@0.6.1
│ ├─┬ connect@2.4.3
│ │ ├── bytes@0.1.0
│ │ ├── formidable@1.0.11
│ │ ├── pause@0.0.1
│ │ └── qs@0.4.2
│ ├── cookie@0.0.4
│ ├── crc@0.2.0
│ ├── debug@0.7.0
│ ├── fresh@0.1.0
│ ├── methods@0.0.1
│ ├── mkdirp@0.3.3
│ ├── range-parser@0.0.4
│ └─┬ send@0.0.3
│   └── mime@1.2.6
├─┬ jade@0.27.2
│ ├── commander@0.6.1
│ └── mkdirp@0.3.0
├── request@2.10.0
├─┬ sequelize@1.5.0
│ ├── commander@0.6.1
│ ├── generic-pool@1.0.9
│ ├── lingo@0.0.5
│ ├── moment@1.1.1
│ ├─┬ mysql@0.9.6
│ │ └─┬ hashish@0.0.4
│ │   └── traverse@0.6.3
│ ├── underscore@1.2.4
│ ├── underscore.string@2.0.0
│ └── validator@0.3.9
└─┬ xml2js@0.1.14
  └── sax@0.4.2

編集-私が従った例を追加し、

すべての認証サイトから

メインアプリファイル(https://github.com/bnoguchi/everyauth/blob/master/example/server.js)で、を使用してビューをレンダリングします。

app.get('/', function (req, res) {
  res.render('home');
});

ビューファイルで、everyauthオブジェクトにアクセスします-https ://github.com/bnoguchi/everyauth/blob/master/example/views/home.jade

- if (!everyauth.loggedIn)
  h2 Not Authenticated

何かが足りない場合を除いて、everyauthオブジェクトはここのビューに渡されません。

4

3 に答える 3

3

これは古い質問ですが、私は同じ問題を抱えていて、別の開発者がまったく同じ問題を抱えていて、完全にオフになっている唯一の答えを見て非常にイライラしました

コードと例を1行ずつ比較するのに数時間かかりましたが、最終的には正しくなりました。

あなたが持っている:

app.configure(function(){
    //...
    app.use(everyauth.middleware());
    //...
}

しかし、

app.configure(function(){
    //...
    app.use(everyauth.middleware(app));
    //...
}

以上です。現在everyauth、ヒスイのビューで定義されており、すべてが期待どおりに機能します。

于 2013-01-02T01:40:17.280 に答える
-1

これは、jade テンプレートから everyauth にアクセスしようとしているためです。テンプレートに everyauth 変数を渡すこともできますが、これは良い方法ではありません。

代わりに、if/else ブロックをコントローラーに残す必要があります。次に、ユーザーがログインしているかどうかに応じて、別のテンプレートをレンダリングできます。

このようなもの

if(everyauth.loggedIn){

  template = 'authenicated';
}
 else{

  template = 'unauthenicated';
}

res.render(template, {

    title: { title: 'Title' }

});
于 2012-08-27T04:13:59.543 に答える