Skip to content

Commit 79819e4

Browse files
committed
Merge pull request #13 from sdjcw/master
一些 bugfix
2 parents ac0ba6e + bed2fdd commit 79819e4

3 files changed

Lines changed: 47 additions & 22 deletions

File tree

lib/leanengine.js

Lines changed: 30 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

@@ -317,6 +325,22 @@ var call = function(funcName, params, user, meta, cb) {
317325
}
318326
};
319327

328+
var hookMarks = [
329+
'__before',
330+
'__after_update',
331+
'__after'
332+
];
333+
334+
// 如果对象有 hook 标记,则需要明确 set 一次,标记才会保存在 changed 列表
335+
// 这样调用 REST API 时才会将标记一同传到存储服务端
336+
var setHookMark = function (obj) {
337+
for (i in hookMarks) {
338+
if (obj.get(hookMarks[i])) {
339+
obj.set(hookMarks[i], obj.get(hookMarks[i]));
340+
}
341+
}
342+
}
343+
320344
var classHook = function(className, hook, object, user, meta, cb) {
321345
if (!Cloud.__code[hook + className]) {
322346
var err = new Error("LeanEngine not found hook '" + hook + className + "' for app '" + AV.applicationId + "' on " + NODE_ENV + ".");
@@ -325,6 +349,7 @@ var classHook = function(className, hook, object, user, meta, cb) {
325349
}
326350
var obj = createAVObject(className);
327351
obj._finishFetch(object, true);
352+
setHookMark(obj)
328353
try {
329354
if (hook.indexOf('__after_') === 0) {
330355
// after 的 hook 不需要 response 参数,并且请求默认返回 ok
@@ -453,23 +478,6 @@ AV.BigQuery.on = function(action, func) {
453478
Cloud.define('__on_complete_bigquery_job', func);
454479
};
455480

456-
var logInBySessionToken = function(sessionToken, cb) {
457-
var user = AV.Object._create("_User");
458-
user._finishFetch({ session_token: sessionToken });
459-
options = {
460-
success: function(user) {
461-
if (user) {
462-
delete user._serverData.session_token;
463-
}
464-
cb(null, user);
465-
},
466-
error: function(user, err) {
467-
cb(err);
468-
}
469-
};
470-
user.logIn(options);
471-
};
472-
473481
Cloud.logInByIdAndSessionToken = function(uid, sessionToken, fetch, cb) {
474482
var user;
475483
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)