@@ -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+
320344var 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-
473481Cloud . logInByIdAndSessionToken = function ( uid , sessionToken , fetch , cb ) {
474482 var user ;
475483 user = new AV . User ( ) ;
0 commit comments