ユーザログイン後にログインからNode.jsのログアウトへのリンクを変更した後 -- node.js フィールド と passport.js フィールド 関連 問題

After user login change links from login to logout in Node.js












0
vote

問題

日本語

私はパスポート数を使用していますユーザー認証には、ユーザーは正常にログインしています。 そして今、私はナビゲーションリンクを変更しようとしました。i.eユーザーが正常にログインした後にログアウトにログインします。

App.jsファイル

で次のミドルウェアを使用しています。 <事前> <コード> var express=require('express'); var path=require('path'); var bodyParser=require('body-parser'); var cookieParser=require('cookie-parser'); var passport=require('passport'); var LocalStrategy=require('passport-local').Strategy; var expressSession=require('express-session'); var app=express(); require('./db'); var userModel=require('./models/usermodel'); var adminModel=require('./models/adminmodel'); app.use(function (req, res, next) { res.locals.login = req.isAuthenticated(); next(); }); //Configuring Routes var routes = require('./routes/index'); var register = require('./routes/register'); var login = require('./routes/login'); var admin = require('./routes/admin'); var addblog = require('./routes/addblog'); var admindashboard = require('./routes/admindashboard'); var adminviewblog = require('./routes/admin-view-blog'); var viewblog = require('./routes/view-blog'); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // app uses configuration app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'routes/uploads'))); app.use(expressSession({ secret: 'keyboard catoard cat' })); app.use(passport.initialize()); app.use(passport.session()); app.use('/', routes); app.use('/register', register); app.use('/login', login); app.use('/admin', admin); app.use('/addblog', addblog); app.use('/admindashboard', admindashboard); app.use('/admin-view-blog', adminviewblog); app.use('/view-blog', viewblog); //passport configuration /*=======passport configuration========*/ passport.use("userss", new LocalStrategy(userModel.authenticate())); passport.use("adminn", new LocalStrategy(adminModel.authenticate())); passport.serializeUser(function(user, done){ done(null, user.id); }); passport.deserializeUser(function(id, done){ userModel.findById(id, function(err, user){ done(err, user); }); }); passport.deserializeUser(function(id, done){ adminModel.findById(id, function(err, user){ done(err, user); }); }); //create server app.listen(3000, function(){ console.log('Server is running localhost:3000'); });

およびEJSテンプレート

<事前> <コード> <% if login %> <li><a href="/logout">Logout</a></li> <% else %> <li><a href="/login">Login</a></li> <li><a href="/register">Register</a></li> <% endif %>

しかしそれはうまくいきません。 次のエラーを示すページ。

<事前> <コード> SyntaxError: Unexpected identifier in F:saurabh_sharma odejslogsystemviewsindex.ejs while compiling ejs at Function (native) at Object.Template.compile (F:saurabh_sharma odejslogsystem ode_modulesejslibejs.js:464:12)

この問題を獲得しましたが、解決策が見つかりませんでした。

誰かがこれについての考えを持っているならば、私に知らせてください。

ありがとう。

英語

I am using passport.js for user authentication, user is successfully logging in. and now I try to change the navigation links i.e Login to logout after user successfully logged in.

for that I am using the following middleware in app.js file

  var express=require('express'); var path=require('path'); var bodyParser=require('body-parser'); var cookieParser=require('cookie-parser'); var passport=require('passport'); var LocalStrategy=require('passport-local').Strategy; var expressSession=require('express-session'); var app=express(); require('./db');     var userModel=require('./models/usermodel');     var adminModel=require('./models/adminmodel');  app.use(function (req, res, next) {   res.locals.login = req.isAuthenticated();   next(); });   //Configuring Routes var routes = require('./routes/index'); var register = require('./routes/register'); var login = require('./routes/login'); var admin = require('./routes/admin'); var addblog = require('./routes/addblog'); var admindashboard = require('./routes/admindashboard'); var adminviewblog = require('./routes/admin-view-blog'); var viewblog = require('./routes/view-blog');  // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs');  // app uses configuration app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));  app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'routes/uploads'))); app.use(expressSession({ secret: 'keyboard catoard cat' })); app.use(passport.initialize()); app.use(passport.session());   app.use('/', routes); app.use('/register', register); app.use('/login', login); app.use('/admin', admin); app.use('/addblog', addblog); app.use('/admindashboard', admindashboard); app.use('/admin-view-blog', adminviewblog); app.use('/view-blog', viewblog);  //passport configuration     /*=======passport configuration========*/ passport.use("userss", new LocalStrategy(userModel.authenticate())); passport.use("adminn", new LocalStrategy(adminModel.authenticate())); passport.serializeUser(function(user, done){     done(null, user.id);     }); passport.deserializeUser(function(id, done){     userModel.findById(id, function(err, user){         done(err, user);         });      });     passport.deserializeUser(function(id, done){     adminModel.findById(id, function(err, user){         done(err, user);         });      });   //create server app.listen(3000, function(){     console.log('Server is running  localhost:3000');     }); 

and in ejs template

<% if login %>         <li><a href="/logout">Logout</a></li>         <% else %>           <li><a href="/login">Login</a></li>         <li><a href="/register">Register</a></li>          <% endif %> 

But its not working. the page showing the following errors.

SyntaxError: Unexpected identifier in F:saurabh_sharma odejslogsystemviewsindex.ejs while compiling ejs    at Function (native)    at Object.Template.compile (F:saurabh_sharma odejslogsystem ode_modulesejslibejs.js:464:12) 

I googled this problem but didn't find the solution.

If someone have idea about this please let me know.

Thanks.

</div
     
       
       

回答リスト

0
 
vote
<事前> <コード> <% if (login) { %> <li><a href="/logout">Logout</a></li> <% } else { %> <li><a href="/login">Login</a></li> <li><a href="/register">Register</a></li> <% } %>
 
<% if (login) { %> <li><a href="/logout">Logout</a></li> <% } else { %>  <li><a href="/login">Login</a></li> <li><a href="/register">Register</a></li>  <% } %> 
</div
 
 
         
         
0
 
vote

誤った!

<事前> <コード> <% if(true){ %> <h1>foo</h1> <% } %> <% else{ %> <h1>bar</h1> <% } %>

正しい

<事前> <コード> <% if(true){ %> <h1>foo</h1> <% } else{ %> <h1>bar</h1> <% } %>

あなたの条件を正しく構成してください。

リファレンス: EJSで条件付きステートメントを使用できます。テンプレート(JMVC)?

 

Incorrect!

<% if(true){ %> <h1>foo</h1> <% } %> <% else{ %> <h1>bar</h1> <% } %> 

Correct

<% if(true){ %> <h1>foo</h1> <% } else{ %>   <h1>bar</h1> <% } %> 

Please structure your conditionals correctly.

Reference: Can I use conditional statements with EJS templates (in JMVC)?

</div
 
 
         
         
0
 
vote

最初にapp.jsまたはserver.jsでグローバル変数をメインファイル

にします。 <事前> <コード> app.get('*', function(req, res, next) { res.locals.user = req.user || null; next(); });

を使用して、Navbar

でこのように適用します。 <事前> <コード> <%if (!user) { %> <li><a href="/user">login</a></li> <% }else{ %> <li><a href="/user/logout">logout</a></li> <%}%>
 

first make a global variable in app.js or server.js in your main file

app.get('*', function(req, res, next) {     res.locals.user = req.user || null;     next(); }); 

and then apply like this in your navbar

             <%if (!user) { %>                 <li><a href="/user">login</a></li>                 <% }else{ %>                     <li><a href="/user/logout">logout</a></li>                     <%}%> 
</div
 
 

関連する質問

10  認証後にassest.js + express.jsを元の宛先に転送する  ( Passport js express js forward user to original destination after authenticati ) 
私は、サーバー上のNode + Express + Passportであり、クライアント上のJQuery + Backbone.jsです。クライアントはURLにハッシュタグを使用しますが、ユーザーがログインすることが重要です。 アプリがURLを介してアクセス可...

0  財産ごとに  ( Find by property ) 
私は次のようにムーゴーススキーマを定義しました: <事前> <コード> var UserSchema = new mongoose.Schema({ google: Object, github: Object, linkedin: O...

14  ユーザー認証セッション情報を保存するためにHTML5ローカルストレージを使用できますか  ( Can i use html5 local storage for storing user authentication session informatio ) 
クイックバックグラウンド: 私はMongo / Express / Angular / Node Spaを書いていて、パスポートを使用しているユーザーの認証/承認を処理するためのオプションを設定します。 パスポート付きサーバー上のセッションを正常に維持してい...

0  ログインシステムを正しく実行する方法  ( How to do a login system properly ) 
ノード、Express、Passportを使用しています。 Googleアカウントを持っていないユーザーにカスタム登録フォームを実装したい。問題は、しっかりとそれをしっかりとやるのですか? 自分自身をどのくらい実装する必要がありますか?データベース内のユーザー...

3  TomcatとNodeJSでシングルサインオン  ( Single sign on with tomcat and nodejs ) 
同じサーバー上で実行されている2つの異なるアプリケーションがあり、Spring-Social and Spring-Securityを搭載したTomcatでのJavaベースで、もう1つはPassportJSとしてのNodeJSアプリケーションです。 両方のアプ...

2  Passport Librariesのプロフィール、_RAW、および_JSON  ( Profile raw and json of passport libraries ) 
<コード> passport.js 、<コード>、<コード> profile1 、<コード> profile2 、<コード> 99887666 など。すべて同じ署名があります。 <コード> loginSuccessfully : <事前> <コード> Pas...

1  MicrosoftユーザーのEメールアドレスを入手してください  ( Get the email address of a microsoft user ) 
login with Microsoft ボタンを私の平均スタックアプリケーションに追加したいです。だから私は passport-microsoft 。 <コード> passport.authenticate('microsoft', { scope: ...

0  PROSSION.JSを使用してユーザーの検証を宣伝する  ( Promisses issue validating a user using password js ) 
passport.jsとes6 を使用して検証を登録しようとしています これは私の検証機能です。 <事前> <コード> passport.use(new BasicStrategy( function(login, password, callbac...

4  Passport Wontセッション変数内で保存します。 req.userはナビゲート後に存在しません  ( Passport wont save within session variable req user does not exist after naviga ) 
背景: ポート4200でangular-cliを持ち、サーバー側API Node.jsが3000で実行されています。 Passport-Localを使用してログインした後にセッションパスポートの値が保存されたことを確認します。 SOログイン後に別のページに...

1  セッションとサブドメインを持つHTTPベアラ  ( Http bearer with sessions and subdomains ) 
Client.domain.comでアクセスできる単一のページのWebアプリケーションを構築しようとしています。 api.domain.comでWebService APIが公開されています(モバイルアプリクライアントからもアクセスできます)。 パスポートを...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有