Session 解析服务器twitter身份验证:集成了twitter身份验证,但无法创建用于客户端的会话

Session 解析服务器twitter身份验证:集成了twitter身份验证,但无法创建用于客户端的会话,session,authentication,parse-platform,twitter-oauth,Session,Authentication,Parse Platform,Twitter Oauth,解析云代码: Parse.Cloud.define("twitter", function(req, res) { /* |-------------------------------------------------------------------------- | Login with Twitter | Note: Make sure "Request email addresses from users" is enable

解析云代码:

Parse.Cloud.define("twitter", function(req, res) {
    /*
        |--------------------------------------------------------------------------
        | Login with Twitter
        | Note: Make sure "Request email addresses from users" is enabled
        | under Permissions tab in your Twitter app. (https://apps.twitter.com)
        |--------------------------------------------------------------------------
        */
    var requestTokenUrl = 'htt****/oauth/request_token';
    var accessTokenUrl = 'http***itter.com/oauth/access_token';
    var profileUrl = 'https://api.twitter.com/1.1/account/verify_credentials.json';

    // Part 1 of 2: Initial request from Satellizer.
    if (!req.params.oauth_token || !req.params.oauth_verifier) {
        var requestTokenOauth = {
            consumer_key: 'EVJCRJfgcKSyNUQgOhr02aPC2',
            consumer_secret: 'UsunEtBnEaQRMiq5yi4ijnjijnjijnijnjEjkjYzHNaaaSbQCe',
            oauth_callback: req.params.redirectUri
        };

        // Step 1. Obtain request token for the authorization popup.
        request.post({
            url: requestTokenUrl,
            oauth: requestTokenOauth
        }, function(err, response, body) {
            var oauthToken = qs.parse(body);
            // console.log(body);
            // Step 2. Send OAuth token back to open the authorization screen.
            console.log(oauthToken);
            res.success(oauthToken);
        });
    } else {
        // Part 2 of 2: Second request after Authorize app is clicked.
        var accessTokenOauth = {
            consumer_key: 'EVJCRJfgcKSyNUQgOhr02aPC2',
            consumer_secret: 'UsunEtBnEaQRMiq5yi4ijnjijnjijnijnjEjkjYzHNaaaSbQCe',
            token: req.params.oauth_token,
            verifier: req.params.oauth_verifier
        };
        // Step 3. Exchange oauth token and oauth verifier for access token.
        request.post({
            url: accessTokenUrl,
            oauth: accessTokenOauth
        }, function(err, response, accessToken) {

            accessToken = qs.parse(accessToken);

            var profileOauth = {
                consumer_key: 'EVJCRJfgcKSyNUQgOhr02aPC2',
                consumer_secret: 'UsunEtBnEaQRMiq5yi4ijnjijnjijnijnjEjkjYzHNaaaSbQCe',
                token: accessToken.oauth_token,
                token_secret: accessToken.oauth_token_secret,
            };
            console.log(profileOauth);

            // Step 4. Retrieve user's profile information and email address.
            request.get({
                url: profileUrl,
                qs: {
                    include_email: true
                },
                oauth: profileOauth,
                json: true
            }, function(err, response, profile, USER) {

                console.log(profile);
                //console.log(response.email);

                Parse.Cloud.useMasterKey();
                var UserPrivateInfo = Parse.Object.extend("UserPrivateInfo");
                var query = new Parse.Query(UserPrivateInfo);
                query.equalTo("email", profile.email);
                query.first({
                    success: function(privateInfo) {
                        if (privateInfo) {
                            res.success(privateInfo.get('user'));
                        } else {
                            response.success();
                        }
                    },
                    error: function(error) {
                        response.error("Error : " + error.code + " : " + error.message);
                    }
                });
            });
        });
    }

});
对于使用Sendgrid twitter身份验证的客户端:

loginCtrl.twitterLogin = function() {
    $auth.authenticate("twitter").then(function(response) {
        console.log(response.data.result);
        var user = response.data.result;
        if (!user.existed()) {
var promise = authFactory.saveUserStreamDetails(user,                            response.email);
            promise.then(function(response) {
                signInSuccess(response);
            }, function(error) {
                console.log("error while saving user details.");
            });
        } else {
            signInSuccess(user);
        }


    }).catch(function(error) {
        console.log(error);
    });;
};
问题: 第1步:调用云函数
Parse.cloud.define(“twitter”),使用loginCtrl.twitterLogin定义函数(req,res)

第2步:Twitter弹出窗口打开,用户登录Twitter

步骤3:获得验证密钥,然后再次调用云函数
Parse.cloud.define(“twitter”),调用函数(req,res)
,验证用户

第4步:使用twitter API获取用户电子邮件。

步骤5:我可以使用电子邮件获取现有的Parse User对象,也可以使用该电子邮件注册。

步骤6:将解析用户对象返回给客户端,但没有附加会话,因此**如何创建用户会话?

没有解析会话,我们无法登录解析应用程序。每个clound代码api/函数调用都将失败,因为没有会话连接到它们。因此,如何使用twitter身份验证创建和管理会话