0

Appcelerator ACS のカスタム オブジェクトにデータを保存しようとしています。そこで、そのためのサービスが登場します。新しいオブジェクトを作成するために認証が必要になるたびに

しかし、ACS でのログイン中にエラーが発生することがあります。しかし、常に発生するわけではありません。サービスを複数回呼び出した場合のみです。

私が得ているエラーは次のとおりです。

{ 成功: false、エラー: true、コード: 400、メッセージ: 「無効なリクエストが送信されました。」}

ログインに使用するコード:

ACS.Users.login(userData, function(data){
    if(data.success) {
        console.log("----------Successful to login.---------------");
        console.log(data);
        res.send(data);
        res.end();

    } else {
        console.log("------------------login failed---------------");
        console.log(data);
        res.send(data);
        res.end();
    }
},req, res);

node.ACS Web サービス アプリ (Web アプリではない) からセッション ID を再利用する方法を理解するのに役立つ人がいますか?

何かをカスタムオブジェクトにプッシュする前に、セッションを維持したり、セッションの有効性を確認したりするにはどうすればよいですか? 誰かが同様の問題に直面しましたか?

ありがとうピーター

4

2 に答える 2

3

req パラメータと res パラメータを ACS.Users.login に渡しているため、セッションは _session_id Cookie に保存されます。

http://docs.appcelerator.com/cloud/latest/#!/guide/node_acs

その後 ACS を呼び出すときに、req および res パラメータを渡すと、このセッション トークンがチェックされます。

タイムアウトまたはログアウト後に、セッションが無効になる可能性があります。セッションがまだ良好かどうかを確認するには、次の REST API エンドポイント (GET) を確認する方法があります。

https://api.cloud.appcelerator.com/v1/users/show/me.json?key= (あなたのACSキー)&_session_id=(ユーザーのセッションID)

また、何らかの理由で、acs-node v0.9.3 は、異なるユーザーに対しても同じセッション ID を返しているようです。私が見たいくつかの副作用には、(1) 間違ったユーザーがオブジェクトを変更しようとした、(2) あるユーザーによって作成されたオブジェクトが実際には最後にログインした人が所有している、などがあります。 v0.9.2 では、この問題が回避されます。

于 2014-12-09T02:06:14.313 に答える
0

node-acs がシャットダウンされたので、全員が新しい arrowdb ノード sdk に移行する義務があります

ユーザーを認証しないという上記の問題を解決するには、すべての ArrowDB 呼び出しの前に、次のようにユーザーの session_id を渡すようにしてください。

// Connect Node.ACS to existing ACS
var ArrowDB = require('arrowdb'),
    arrowDBApp = new ArrowDB('XXYYZZZ', { // ArrowDB Key
        apiEntryPoint: 'https://api.cloud.appcelerator.com',
        autoSessionManagement: false, // handle session_id yourself
        prettyJson: true,
        responseJsonDepth: 3
    }); 

// == Creates the ACS_Event for a logged in User on ArrowDB ==
function createACSEvent(uniqueId, params) {
    arrowDBApp.sessionCookieString = params.session_id; //<-- THIS IS IT!
    arrowDBApp.eventsCreate({
        name: 'someEvent',
        start_time: params.start_time,
        custom_fields: params,
    }, function(err, result) {
        if (err) {
            logger.info( 'ERROR ACS_Event created '+ err);
        } else {
            logger.info( 'Success Creating ACSEvent ' + JSON.stringify(result));
        }
    });
}
于 2016-10-15T13:01:58.067 に答える