1

私はphpに古いシステムを持っているので、Expressフレームワークを使用してNode.jsで新しいシステムを作成しています。Node.jsサイトのある場所で、phpサイトにログインする必要があります(サイトは同じ資格情報を使用します)。

基本的に、mi ビュー (Express) のどこかにボタンがあり、それを押すと、どこかからユーザー資格情報を取得し、この資格情報を使用して (フォームなしで) php サイトにログインし、既にログインしている php システムにリダイレクトする必要があります。ブラウザで。

私はこの答えに従おうとしています

したがって、ボタンが押されたときに実行されるコードは次のとおりです。

app.post('/loginphp', function(req, res) {

  var data = request.post(
    'http://somesite.somedomain.com/Users/login', {
      form:{
       'data[User][email]': 'someuser@somedomain.com',
       'data[User][pass]' : 'somepassword'
      }
    }, function(error, response, body) {

      var sessionCookie = response.headers['set-cookie'][response.headers['set-cookie'].length - 1];
      sessionCookie = sessionCookie.split(';');
      sessionCookie = sessionCookie[0];

      // trying with this way  the same results

      /*
         res.set({'Cookie' : sessionCookie}).
           redirect('http://somesite.somedomain.com/Users');
      */

      // and same results too in this one

      /*
         res.setHeader('Cookie', sessionCookie).
           redirect('http://somesite.somedomain.com/Users');
      */


      res.header('Cookie', sessionCookie)
         .redirect('http://somesite.somedomain.com/Users');

      //the output shows the cookie is saved just fine on headers

      /*console.log(res.header());*/


      // Doing this!!! -> WORKS!! , but i need be on the browser not here.

      /*
       request.get('http://somesite.somedomain.com/Users', {
          headers: {"Cookie" : sessionCookie},
        }, function (error, response, body) {
          if(response.statusCode == 200) {
           console.log(body);
          }
       });
      */

    });
});

(request.get から) コードの最後のコメント部分のコメントを外します。これがうまく機能し、ログインしている Web サイト ユーザーのホームページの HTML (本文) を出力していることがわかりますが、ヘッダーに Cookie を設定してリダイレクトしようとするとブラウザでログインするためにサイトにアクセスすると、これは機能しません

この方法でこれを行うことは可能ですか?

何か足りない?

前もって感謝します。

4

1 に答える 1

1

@Gonzalo Cakephp アプリを実行している (サーバー/コード) にまだアクセスできますか?

node.js (express) アプリが Cakephp アプリ/ウェブサイトに POST リクエストを発行できるようにするには、クロスオリジン ヘッダーを追加する必要があります。

例えば:

<?php
 header("Access-Control-Allow-Origin: *");

または CakePHP に固有:

$this->response->header('Access-Control-Allow-Origin', '*');

次に、次を実行してテストできます。

curl -H "Content-Type: application/json" -dv "{'data[User][email]':'someuser@somedomain.com','data[User][pass]' : 'somepassword'}" http://somesite.somedomain.com/Users/login

ヘッダーに次のようなエントリが含まれていることを確認します。

Access-Control-Allow-Origin: *

これにより、ノード (リクエストを使用) とクライアント アプリの両方から PHP アプリにアクセスできるようになります。

より詳しい情報:

それでも CakePHP アプリに POST リクエストを送信できない場合は、(コメントで) お知らせください。

于 2014-08-06T15:19:06.300 に答える