2016-04-05 11 views
8

私はログインページとサインアップページを持っています。ランダムなユーザーがログインしたいと思ってログインが成功したら、私は彼を別の.ejsページ(例えばUserHomePage.ejs)にリダイレクトしたいのですが、これまで何も試したことはありません。node.jsの別のページにリダイレクトする方法

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

また、ボタンをクリックしたときにユーザーをリダイレクトする方法も知りたいと思います。

私はすべてのユーザーを表示し、次に「別の使用済みボタンを追加します」という表示ユーザーページでは、それ、どうやったら出来るの? onclickの後に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

"どのボタンにリダイレクトするためにクリックしてください" - それはただではありませんlocation.href = '/ url/to/visit' onclick? –

+0

@RobBranderあなたはonclick = "location.href = 'localhost:3000/Registration'"やonclick = "location.href = '/ Registration'"などの何かを意味しますか? – aiden87

+0

ええ、

答えて

19

あなたがもしelse文がに.getまたはリダイレクトする.postに包まれる必要がある

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

ユーザーがノードアプリケーションにログインすると、あなたはExpressを使用していると思いますか?さて、res.redirectを使って簡単にリダイレクトすることができます。同様に:

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

は、まったく同じものを書いたものではありませんが、動作していませんか? – aiden87

+0

純粋なノードhttpを使用している場合、リダイレクトが異なるため、Expressを使用していますか? –

+0

yeh im express express – aiden87

1

をリダイレクトする行を返す必要があります。このような

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

または

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

として[OK]を、私はあなたが1つの私の例を使用して手助けしようとするでしょう。まず、アプリケーションディレクトリ構造とapp.jsのようなファイルを自動的に作成するために、私はという表現を使用していることを知る必要があります。ここで重要なことは、アクション= "/ログイン"ある

... 
<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> 

:のように私のlogin.htmlとが見えます。

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> 

はO属性を取得するには、以下の構造を有しているHTML f ユーザー変数の場合、ユーザー変数をrouting.js(インデックスと呼ばれます)に初期化する必要があります。私の場合は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

とyeh多分テーブルを結合して別の質問。どのように私は<%= user.attributes.name%>を読むことができ、 jsファイル。たとえば、私はアイテムのリストを持っている、私は1つを選択し、私はアイテムのIDと名前を取得する必要があるという意味、いくつかのユーザーに追加... – aiden87

0

@Nazarメデイロス - あなたのソリューションは、エクスプレスでパスポートを使用します。私はパスポートを使いません、ただexpress-jwtです。私は何か間違っているかもしれませんが、ユーザーがログインすると、トークンはクライアント側に戻らなければなりません。私が今までに見つけたことから、これはトークンでjsonを返さなければならないことを意味し、そのためリダイレクトを呼び出すことはできません。私がそこに欠けているものはありますか?

これを回避するには、単にトークンを返し、クッキーに格納してから有効なトークンを使用してajax GETリクエストを行います。そのajax呼び出しが返ってくると、私はbodyのhtmlを返されたHTMLに置き換えます。これはおそらく正しい方法ではありませんが、私はより良い方法を見つけることができません。ここに私のJQuery JavaScriptコードがあります。

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

か:あなたは例えばwindow.location.href="your URL"

を使用することができます別の方法で

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

return res.redirect("your url"); 
関連する問題