web-dev-qa-db-ja.com

node.jsで別のページにリダイレクトする方法

ログインページとサインアップページがあります。ランダムなユーザーがログインを希望し、ログインが成功した場合、別の.ejsページ(たとえば、UserHomePage.ejs)にリダイレクトしたいのですが、これまで試したことのあるものは何もありません。

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>
16
aiden87

リダイレクトする行を返す必要があります

return res.redirect('/UserHomePage');
39
Rob Brander

わかりました、私は私の例を使用してあなたを助けようとします。まず、アプリケーションのディレクトリ構造とapp.jsのようなファイルの作成にexpressを使用していることを知っておく必要があります自動的に方法。私の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>

ここで重要なことはaction = "/ login"です。これは、index.js(ビュー間を移動するため)で次のように使用するパスです。

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

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

これにより、ログインに成功した後、別のページにリダイレクトできます。ページ間のリダイレクトについて確認できる役立つチュートリアルがあります。

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

<%= user.attributes.name%>のようなステートメントを読むには、単純なprofile.htmlを見てみましょう次の構造があります。

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

user変数の属性を取得するには、routing.js(インデックスと呼ばれる)でuser変数を初期化する必要があります。私の場合はjs)。これは

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

オブジェクトモデルにmongooseを使用しています:

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

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

さらなる質問はいつでもお願いします...よろしく、Nazar

4
Nazar Medeiros

ユーザーがNodeアプリへのログインに成功した場合、Expressを使用していると思いますよね?res.redirectを使用して簡単にリダイレクトできます。

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

別の方法では、window.location.href="your URL"を使用できます

例えば。:

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

または:

return res.redirect("your url");
1
Biswadev

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

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

function loginUser(){
  $.post("/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 "";
}
1
ajpieri

If elseステートメントは、リダイレクトするために.getまたは.postでラップする必要があります。といった

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

または

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