Skip to content

Commit bed2fdd

Browse files
committed
bugfix: hook 函数 AV.User.current() 方法未能正确获取 User 对象
1 parent a64c7c1 commit bed2fdd

3 files changed

Lines changed: 30 additions & 22 deletions

File tree

lib/leanengine.js

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -171,16 +171,19 @@ Cloud.use('/__engine/1/ping', function(req, res) {
171171
// parseUserInfo
172172
Cloud.use(route, function(req, res, next) {
173173
if (req.AV.sessionToken && req.AV.sessionToken !== '') {
174-
logInBySessionToken(req.AV.sessionToken, function(err, user) {
175-
if (err) {
176-
throw err;
174+
AV.User.become(req.AV.sessionToken, {
175+
success: function(user) {
176+
req.AV.user = user;
177+
next();
178+
},
179+
error: function(user, err) {
180+
next(err)
177181
}
178-
req.AV.user = user;
179-
return next();
180182
});
181183
} else if (req.body.user) {
182184
var userObj = new AV.User();
183185
userObj._finishFetch(req.body.user, true);
186+
AV.User._saveCurrentUser(userObj);
184187
req.AV.user = userObj;
185188
return next();
186189
} else {
@@ -216,6 +219,7 @@ Cloud.use('/__engine/1/ping', function(req, res) {
216219
var userObj = new AV.User();
217220
if (split[1] === 'onVerified') {
218221
userObj._finishFetch(req.body.object, true);
222+
AV.User._saveCurrentUser(userObj);
219223
onVerified(split[2], userObj);
220224
cb(null, 'ok');
221225

@@ -232,6 +236,10 @@ Cloud.use('/__engine/1/ping', function(req, res) {
232236
}
233237
}
234238
});
239+
240+
Cloud.use(route, function(err, req, res, next) {
241+
respError(res, err);
242+
})
235243
});
236244
});
237245

@@ -470,23 +478,6 @@ AV.BigQuery.on = function(action, func) {
470478
Cloud.define('__on_complete_bigquery_job', func);
471479
};
472480

473-
var logInBySessionToken = function(sessionToken, cb) {
474-
var user = AV.Object._create("_User");
475-
user._finishFetch({ session_token: sessionToken });
476-
options = {
477-
success: function(user) {
478-
if (user) {
479-
delete user._serverData.session_token;
480-
}
481-
cb(null, user);
482-
},
483-
error: function(user, err) {
484-
cb(err);
485-
}
486-
};
487-
user.logIn(options);
488-
};
489-
490481
Cloud.logInByIdAndSessionToken = function(uid, sessionToken, fetch, cb) {
491482
var user;
492483
user = new AV.User();

test/function_test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ AV.Cloud.define('testUser', function(request, response) {
5757
assert.equal(request.user.className, '_User');
5858
assert.equal(request.user.id, '54fd6a03e4b06c41e00b1f40');
5959
assert.equal(request.user.get('username'), 'admin');
60+
assert.equal(request.user, AV.User.current());
6061
response.success("ok");
6162
});
6263

@@ -307,6 +308,21 @@ describe('functions', function() {
307308
.expect(200, done);
308309
});
309310

311+
// 无效 sessionToken 测试
312+
it('testUser_invalid_sessionToken', function(done) {
313+
this.timeout(5000);
314+
request(AV.Cloud)
315+
.post('/1/functions/testUser')
316+
.set('X-AVOSCloud-Application-Id', appId)
317+
.set('X-AVOSCloud-Application-Key', appKey)
318+
.set('x-avoscloud-session-token', '00000000000000000000')
319+
.expect(400)
320+
.end(function(err, res) {
321+
res.body.should.eql({ code: 1, error: '找不到有效用户。' });
322+
done();
323+
});
324+
});
325+
310326
// 测试调用 run 方法时,传递 user 对象的有效性
311327
it('testRunWithUser', function(done) {
312328
this.timeout(5000);

test/hook_test.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ AV.initialize(appId, appKey, masterKey);
1212
AV.Cloud.beforeSave("TestClass", function(request, response) {
1313
if (request.user) {
1414
assert.equal(request.user.className, '_User');
15+
assert.equal(request.user, AV.User.current());
1516
}
1617
assert.equal(request.object.className, 'TestClass');
1718
request.object.set('user', request.user);

0 commit comments

Comments
 (0)