2016-04-05 9 views
8

में किसी अन्य पृष्ठ पर रीडायरेक्ट कैसे करें मेरे पास लॉगिन और साइनअप पृष्ठ है। जब यादृच्छिक उपयोगकर्ता लॉगिन करना चाहता है, और लॉगिन सफल है, तो मैं उसे दूसरे .ejs पृष्ठ (उदाहरण के लिए UserHomePage.ejs) पर रीडायरेक्ट करना चाहता हूं, हालांकि, मैंने अभी तक कुछ भी नहीं किया है।node.js

if (loggedIn) 
    { 
     console.log("Success!"); 
     res.redirect('/UserHomePage'); 
    } 
    else 
    { 
     console.log("Error!"); 
    } 

मैं यह भी जानना चाहूंगा कि बटन क्लिक पर उपयोगकर्ता को रीडायरेक्ट कैसे करें।

आइए प्रदर्शन उपयोगकर्ता पेज पर आईएम कहें, जहां मैं अपने सभी उपयोगकर्ताओं को प्रदर्शित करता हूं, फिर "एक और प्रयुक्त बटन जोड़ें" है। मैं उसको कैसे करू? मैं ऑनक्लिक के बाद उपयोगकर्ता को Register.js पृष्ठ पर रीडायरेक्ट कैसे करूं?

<h2>List of users</h2> 
<ul> 
<% uporabniki.forEach(function(user) { %> 
<li> 
    <%= user.attributes.name %> 
    <%= user.attributes.last name %> 
</li> 
<% }); %> 
</ul> 

<h3>Add another user</h3> 
<form method="post"> 
<input type="submit" value="Add user" /> 
</form> 

बहुत बहुत धन्यवाद!

+0

"कैसे बटन पर रीडायरेक्ट करने के लिए क्लिक करें" - कि बस नहीं है onclick में location.href = '/ url/to/visit'? –

+0

@RobBrander का मतलब है कि आप onclick = "location.href = 'localhost: 3000/पंजीकरण'" या onclick = "location.href = '/ पंजीकरण'" या कुछ और पसंद करते हैं? – aiden87

+0

हाँ, <बटन प्रकार = "बटन" onclick = "location.href = '/ पंजीकरण'"> पंजीकरण –

उत्तर

19

आप लाइन है कि

return res.redirect('/UserHomePage'); 
1

यदि उपयोगकर्ता आपके नोड ऐप में सफल लॉगिन करता है, तो मुझे लगता है कि आप एक्सप्रेस का उपयोग कर रहे हैं, है ना? ठीक है आप res.redirect का उपयोग कर आसान रीडायरेक्ट कर सकते हैं। जैसा:

app.post('/auth', function(req, res) { 
    // Your logic and then redirect 
    res.redirect('/user_profile'); 
}); 
+0

वह नहीं है जो मैंने बिल्कुल लिखा था, लेकिन काम नहीं कर रहा है? – aiden87

+0

क्या आप एक्सप्रेस का उपयोग कर रहे हैं, क्योंकि यदि आप शुद्ध नोड http का उपयोग कर रहे हैं तो रीडायरेक्ट अलग है। –

+0

ये मैं एक्सप्रेस – aiden87

1

पुनर्निर्देश किसी और बयान एक .Get या पुनर्निर्देशित करने के लिए एक .post में लिपटे होने की जरूरत है, तो वापस आ जाएगी।

app.post('/login', function(req, res) { 
}); 

या

app.get('/login', function(req, res) { 
}); 
3

ठीक है के रूप में इस तरह के, मैं तुम्हें एक मेरी उदाहरणों का उपयोग करने में मदद करने की कोशिश करेंगे। सबसे पहले, आपको यह जानना होगा कि मैं एक्सप्रेस को अपनी एप्लिकेशन निर्देशिका संरचना के लिए और app.js जैसी फ़ाइलों को स्वचालित रूप से बनाने के लिए उपयोग कर रहा हूं। मेरे login.html लगता है:

... 
<div class="form"> 
<h2>Login information</h2> 
<form action="/login" method = "post"> 
    <input type="text" placeholder="E-Mail" name="email" required/> 
    <input type="password" placeholder="Password" name="password" required/> 
    <button>Login</button> 
</form> 

यहां महत्वपूर्ण बात यह है कार्रवाई है = "/ के लिए लॉग इन"

app.post('/login', passport.authenticate('login', { 
    successRedirect : '/home', 
    failureRedirect : '/login', 
    failureFlash : true 
})); 

app.get('/home', function(request, response) { 
     response.render('pages/home'); 
}); 

यह मैं एक सफल प्रवेश के बाद एक पृष्ठ पर रीडायरेक्ट करने के लिए अनुमति देता है: इस पथ मैं जो इस तरह दिखेगा (दृश्यों के बीच नेविगेट करने के लिए) मेरे index.js में इस्तेमाल करते हैं।

http://cwbuecheler.com/web/tutorials/2014/restful-web-app-node-express-mongodb/

तरह <% = user.attributes.name%> एक बयान पढ़ने के लिए चलो एक सरल प्रोफाइल पर एक नजर है: वहाँ एक उपयोगी ट्यूटोरियल आप पृष्ठों के बीच रीडायरेक्ट करने के लिए बाहर की जाँच कर सकता है। एचटीएमएल जो निम्नलिखित संरचना है:

<div id = "profile"> 
<h3>Profilinformationen</h3> 
    <form> 
     <fieldset> 
      <label id = "usernameLabel">Username:</label> 
      <input type = "text" id="usernameText" value = "<%= user.user.username %>" /> 
      <br> 
     </fieldset> 
    </form> 

गुण प्राप्त करने के लिए ओ एफ उपयोगकर्ता चर, आपको उपयोगकर्ता वैरिएबल को अपने routing.js (जिसे इंडेक्स कहा जाता है) में प्रारंभ करना होगा।मेरे मामले में जेएस)। यह लग रहा है

तरह
app.get('/profile', auth, function(request, response) { 
    response.render('pages/profile', { 
     user : request.user 
    }); 
}); 

मैं अपने ऑब्जेक्ट मॉडल के लिए नेवला उपयोग कर रहा हूँ:

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 
var role  = require('./role'); 

var userSchema = mongoose.Schema({ 
    user    : { 
     username  : String, 
     email  : String, 
     password  : String 
    } 
}); 

मुझे आगे के प्रश्न के लिए कभी भी पूछो ... सादर, नज़र

+0

का उपयोग कर रहा हूं, धन्यवाद, यह बहुत उपयोगी था। Altho मैं आपके जवाब को "दाएं एक" के रूप में चिह्नित नहीं कर सकता क्योंकि मैंने पहले से ही यह किया है :( – aiden87

+0

और ये शायद तालिकाओं के संयोजन के साथ एक और सवाल है। मैं <% = user.attributes.name%> को कैसे पढ़ सकता हूं और इसे मेरे अंदर रख सकता हूं। जेएस फ़ाइल। उदाहरण के लिए। मेरे पास आइटम की एक सूची है, मैं एक चुनता हूं, और फिर मैं इसे किसी उपयोगकर्ता को जोड़ता हूं, जिसका अर्थ है कि मुझे आइटम आईडी और नाम प्राप्त करने की आवश्यकता है ... – aiden87

0

@Nazar Medeiros - अपने समाधान एक्सप्रेस के साथ पासपोर्ट का उपयोग करता है। मैं पासपोर्ट का उपयोग नहीं कर रहा हूं, बस एक्सप्रेस-जेडटी। मैं कुछ गलत कर रहा हूं, लेकिन जब कोई उपयोगकर्ता लॉग इन करता है, टोकन को क्लाइंट साइड पर लौटने की आवश्यकता होती है। जो मैंने अभी तक पाया है, इसका मतलब है कि हमें टोकन के साथ एक जेसन वापस करना होगा और इसके लिए रीडायरेक्ट को कॉल नहीं किया जा सकता है। क्या मैं वहां कुछ याद कर रहा हूं?

इसके आसपास जाने के लिए, मैं बस टोकन वापस कर देता हूं, इसे अपनी कुकीज़ में संग्रहीत करता हूं और फिर AJAX GET अनुरोध (वैध टोकन के साथ) बना देता हूं। जब वह AJAX कॉल रिटर्न देता है तो मैं वापस एचटीएमएल के साथ शरीर के एचटीएमएल को प्रतिस्थापित करता हूं। यह संभवतः ऐसा करने का सही तरीका नहीं है, लेकिन मुझे एक बेहतर तरीका नहीं मिल रहा है। यहां मेरा JQuery जावास्क्रिप्ट कोड है।

function loginUser(){ 
    $.post("https://stackoverflow.com/users/login", { 
    username: $('#login_input_username').val(), 
    password: $('#login_input_password').val() 
}).done(function(res){ 
    document.cookie = "token = " + res.token; 
    redirectToHome(); 
    }) 
} 

function redirectToHome(){ 
    var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "/home", 
    "type": "GET", 
    "headers": { 
     "authorization": "Bearer " + getCookie('token'), 
     "cache-control": "no-cache" 
    } 
    } 

    $.ajax(settings).done(function (response) { 
    $('body').replaceWith(response); 
    }); 
} 

function getCookie(cname) { 
    var name = cname + "="; 
    var decodedCookie = decodeURIComponent(document.cookie); 
    var ca = decodedCookie.split(';'); 
    for(var i = 0; i <ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') { 
      c = c.substring(1); 
     } 
     if (c.indexOf(name) == 0) { 
      return c.substring(name.length, c.length); 
     } 
    } 
    return ""; 
} 
0

एक और तरह से आप उपयोग कर सकते हैं window.location.href="your URL"

जैसे:

res.send('<script>window.location.href="your URL";</script>'); 

या:

return res.redirect("your url");