2

Sencha Touch を使用して外部サイト (自分のサイトではない) にログインしたいです。

これが私のコードの一部です:

ログインコントローラー

Ext.define('Myapp.controller.Login', {
extend: 'Ext.app.Controller',

config: {
    refs: {
       loginForm: '#login-form'  
    },
    control: {
       '#login-button': {
          tap: 'onLoginHandler'
       } 
    }
},

onLoginHandler: function() {
  var form = this.getLoginForm();
  Ext.Ajax.request({
      url: 'https://www.site.com/login.html',
      headers: { 'Content-Type': 'application/x-www-form-urlencoded'},
      method: 'POST',
      params: form.getValues(),
      callback: function(options, success, response){
        console.log(options);
        console.log(response);
      }
  });
}
});

ログインビュー

Ext.define('Myapp.view.Login', {
    extend: 'Ext.form.Panel',
    alias:  'widget.loginview',
    xtype: 'loginform',
    id: 'login-form',
    requires: [
        'Ext.form.FieldSet'
    ],

    config: {
        title: 'Log in',
        iconCls: 'user',
        html: 'Login View',
        method: 'POST',
        items: [ 
            {
                xtype: 'fieldset',
                title: 'Log in',
                items: [ 
                    bunch of fields
                ]
            },
        {
            xtype: 'button',
            text: 'Login',
            ui: 'action',
            id: 'login-button'

        } 
    ]
}
});

ブラウザーのデバッガーに表示される結果は、私が期待しているものではありません。

Request URL:https://www.site.com/login.html?_dc=1375705385394
Request Headers
    Access-Control-Request-Headers:origin, x-requested-with, content-type
    Access-Control-Request-Method:POST
    Origin:http://localhost
    Referer:http://localhost/~me/non/
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Query String Parameters URL encoded
    _dc:1375705385394

フォームデータさえありません。しかし、それは "console.log(response)" (コントローラーを参照) の console.log に表示されるので、送信する必要があります。

ノードのリクエストモジュールは、私が望むように動作しているようです..

var request = require('request');
var form = require('form-data');
var r = request.post('https://www.site.com/login.html', function(err, resp, body){

});

var frm = r.form();
frm.append(...// same fields as in my View, values are hardcoded for testing

これら2つの違いは、リクエストの後にフォームが追加されることです...?

手動でログインしたときのヘッダーは次のとおりです。

Request URL:https://www.site.com/login.html
Request Method:POST
Status Code:302 Found
Request Headers
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8,sv;q=0.6
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:53
    Content-Type:application/x-www-form-urlencoded
    Cookie:NOW=4b21bf97818dd91f28732aec2b12344e28ac4aef; TUX-COOKIE=R2414511234; /=; /firsttimeload=0; s_cc=true; s_sq=%5B%5BB%5D%5D
    Host:www.site.com
    Origin:https://www.site.com
    Referer:https://www.site.com/
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Form Data URL encoded
    ...my secret form data shows up here
Response Headersview source
    Connection:Keep-Alive
    Content-Encoding:gzip
    Content-Length:184
    Content-Type:text/html; charset=iso-8859-1
    Date:Mon, 05 Aug 2013 12:57:09 GMT
    Keep-Alive:timeout=5, max=100
    Location:../redirect/location
    Server:Apache
    Set-Cookie:TUX-COOKIE=R2414511234; path=/
    Set-Cookie:NOW=none; path=/; expires=Fri, 08-Aug-2003 12:57:09 GMT; secure
    Set-Cookie:NOW=e555573f3e21a1f008f4be34c7c61234b1014b6; path=/; secure
    Vary:Accept-Encoding,User-Agent

どんな考えやアイデアでも大歓迎です!ありがとう!

4

1 に答える 1

0

通常、この問題に対処する方法は、NodeJS または PHP を使用してローカル サーバーにプロキシ サービスを作成することです。このプロセスにより、ajax リクエストを同じオリジンに送信できるようになり、バックエンドのポスト/フェッチを使用してサード パーティのサービスと対話することができます。

同一生成元ポリシーに準拠することによって提供される追加のセキュリティに加えて、これには、いくつかの追加の利点があります。Ext アプリはハンド ラングリングを大幅に減らすことができ、プロキシで複数のサービス エンドポイントをサポートできます。サービスが変更された場合は、UI なしでテストできるサーバー コードが用意されているため、デバッグが簡素化されます。

JSONP を使用してリクエストを送信することは可能かもしれませんが、ログイン資格情報を送信している場合は、あまりお勧めできません。

于 2013-08-05T20:31:49.830 に答える