4

2 つのアプリケーションがあり、どちらも Nodejs 上にあります。1 つのフロントエンドともう 1 つのバックエンド。私のバックエンド アプリは、express-jwt および jsonwebtoken ミドルウェアを使用したトークン アクセスで保護されています。

私の問題は次のとおりです。フロントエンドからバックエンドにリクエストを送信してヘッダーにトークンを渡し、バックエンドがリクエストを受け入れて適切に応答します。次に、フロントエンドで応答を特定のページ ( res.redirect('/') ) にリダイレクトします。その瞬間にUnauthorizedError: No authentication token was foundというエラーが表示されます。

私のフロントエンドリクエスト:

/* Authentication */
router.post('/', function(req, res, next) {

    // request login service
    request({
        uri: env.getUrl() + "/user",
        method: 'POST',
        timeout: 10000,
        headers: {
            'Authorization': 'Bearer '.concat(global.token)
        },
        form: { login : req.body.login, pwd : req.body.pwd }
    }, function(error, response, body){
        if(error) {
            logger.error(error);
            res.render("error", {message: "Error getting user" }); 
        }
        else {
            if(body){
                req.session.usuario = JSON.parse(body);
                res.redirect("/");
            } else {
                res.render("login", {message: "Login Failed" });
            }
        }
    });
});

なぜこれが起こるのかわかりません。私たちを手伝ってくれますか?前もって感謝します。

4

2 に答える 2

1

( res.redirectによる)リダイレクトは、新しい HTTP リクエストを発行します。これは、Authorizationヘッダーが空であることを意味します。これにより、UnauthorizedErrorエラーが発生します。

これを修正するには、次の 2 つのオプションがあります。

1. URI
でトークンを渡す 次の方法で、URL で渡されたトークンを使用してリダイレクトを発行できます。

res.redirect("/?access_token=" + global.token);

2. リダイレクトの前にヘッダーを設定する リダイレクト リクエストを行う前にヘッダー
を設定できます。'Authorization'

req.session.access_token = global.token;
于 2016-03-08T14:14:42.803 に答える
0

問題が見つかりました。

フロントエンド アプリがバックエンド側 (API) にリクエストを送信するたびに、フロントエンドにログインしているユーザーがバックエンドに対して検証されるため、フロントエンドのセッションも更新されます。これは、すべてのリクエストが実際には 2 つのリクエストであることを意味します。

  1. アプリが実行している実際の要求としての 1 つ。
  2. ユーザーが存在することを確認するために、フロントエンドにログオンしたユーザーを検証する要求。

この更新 (2 番目のポイント) は、トークンを提供せずに行われました。

于 2016-03-12T23:45:57.357 に答える