|
1625 | 1625 | route !== "requestSmsCode" && |
1626 | 1626 | route !== "verifySmsCode" && |
1627 | 1627 | route !== "users" && |
| 1628 | + route !== "usersByMobilePhone" && |
1628 | 1629 | route !== "cloudQuery" && |
1629 | 1630 | route !== "qiniu" && |
1630 | 1631 | route !== "statuses" && |
|
5328 | 5329 | route = "users"; |
5329 | 5330 | className = null; |
5330 | 5331 | } |
5331 | | - var request = AV._request(route, className, model.id, method, json); |
| 5332 | + //hook makeRequest in options. |
| 5333 | + var makeRequest = options._makeRequest || AV._request; |
| 5334 | + var request = makeRequest(route, className, model.id, method, json); |
5332 | 5335 |
|
5333 | 5336 | request = request.then(function(resp, status, xhr) { |
5334 | 5337 | var serverAttrs = model.parse(resp, status, xhr); |
|
6945 | 6948 | return this.save(attrs, newOptions); |
6946 | 6949 | }, |
6947 | 6950 |
|
| 6951 | + /** |
| 6952 | + * Signs up a new user with mobile phone and sms code. |
| 6953 | + * You should call this instead of save for |
| 6954 | + * new AV.Users. This will create a new AV.User on the server, and |
| 6955 | + * also persist the session on disk so that you can access the user using |
| 6956 | + * <code>current</code>. |
| 6957 | + * |
| 6958 | + * <p>A username and password must be set before calling signUp.</p> |
| 6959 | + * |
| 6960 | + * <p>Calls options.success or options.error on completion.</p> |
| 6961 | + * |
| 6962 | + * @param {Object} attrs Extra fields to set on the new user, or null. |
| 6963 | + * @param {Object} options A Backbone-style options object. |
| 6964 | + * @return {AV.Promise} A promise that is fulfilled when the signup |
| 6965 | + * finishes. |
| 6966 | + * @see AV.User.signUp |
| 6967 | + */ |
| 6968 | + signUpOrlogInWithMobilePhone: function(attrs, options) { |
| 6969 | + var error; |
| 6970 | + options = options || {}; |
| 6971 | + |
| 6972 | + var mobilePhoneNumber = (attrs && attrs.mobilePhoneNumber) || |
| 6973 | + this.get("mobilePhoneNumber"); |
| 6974 | + if (!mobilePhoneNumber || (mobilePhoneNumber === "")) { |
| 6975 | + error = new AV.Error( |
| 6976 | + AV.Error.OTHER_CAUSE, |
| 6977 | + "Cannot sign up or login user by mobilePhoneNumber " + |
| 6978 | + "with an empty mobilePhoneNumber."); |
| 6979 | + if (options && options.error) { |
| 6980 | + options.error(this, error); |
| 6981 | + } |
| 6982 | + return AV.Promise.error(error); |
| 6983 | + } |
| 6984 | + |
| 6985 | + var smsCode = (attrs && attrs.smsCode) || this.get("smsCode"); |
| 6986 | + if (!smsCode || (smsCode === "")) { |
| 6987 | + error = new AV.Error( |
| 6988 | + AV.Error.OTHER_CAUSE, |
| 6989 | + "Cannot sign up or login user by mobilePhoneNumber " + |
| 6990 | + "with an empty smsCode."); |
| 6991 | + if (options && options.error) { |
| 6992 | + options.error(this, error); |
| 6993 | + } |
| 6994 | + return AV.Promise.error(error); |
| 6995 | + } |
| 6996 | + |
| 6997 | + // Overridden so that the user can be made the current user. |
| 6998 | + var newOptions = _.clone(options); |
| 6999 | + newOptions._makeRequest = function(route, className, id, method, json) { |
| 7000 | + return AV._request('usersByMobilePhone', null, null, "POST", json); |
| 7001 | + }; |
| 7002 | + newOptions.success = function(model) { |
| 7003 | + model._handleSaveResult(true); |
| 7004 | + delete model.attributes.smsCode; |
| 7005 | + delete model._serverData.smsCode; |
| 7006 | + if (options.success) { |
| 7007 | + options.success.apply(this, arguments); |
| 7008 | + } |
| 7009 | + }; |
| 7010 | + return this.save(attrs, newOptions); |
| 7011 | + }, |
| 7012 | + |
6948 | 7013 | /** |
6949 | 7014 | * Logs in a AV.User. On success, this saves the session to localStorage, |
6950 | 7015 | * so you can retrieve the currently logged in user using |
|
7268 | 7333 | return user.logIn(options); |
7269 | 7334 | }, |
7270 | 7335 |
|
| 7336 | + /** |
| 7337 | + * Sign up or logs in a user with a mobilePhoneNumber and smsCode. |
| 7338 | + * On success, this saves the session to disk, so you can retrieve the currently |
| 7339 | + * logged in user using <code>current</code>. |
| 7340 | + * |
| 7341 | + * <p>Calls options.success or options.error on completion.</p> |
| 7342 | + * |
| 7343 | + * @param {String} mobilePhoneNumber The user's mobilePhoneNumber. |
| 7344 | + * @param {String} smsCode The sms code sent by AV.Cloud.requestSmsCode |
| 7345 | + * @param {Object} attributes The user's other attributes such as username etc. |
| 7346 | + * @param {Object} options A Backbone-style options object. |
| 7347 | + * @return {AV.Promise} A promise that is fulfilled with the user when |
| 7348 | + * the login completes. |
| 7349 | + * @see AV.User#signUpOrlogInWithMobilePhone |
| 7350 | + * @see AV.Cloud#requestSmsCode |
| 7351 | + */ |
| 7352 | + signUpOrlogInWithMobilePhone: function(mobilePhoneNumber, smsCode, attrs, options) { |
| 7353 | + attrs = attrs || {}; |
| 7354 | + attrs.mobilePhoneNumber = mobilePhoneNumber; |
| 7355 | + attrs.smsCode = smsCode; |
| 7356 | + var user = AV.Object._create("_User"); |
| 7357 | + return user.signUpOrlogInWithMobilePhone(attrs, options); |
| 7358 | + }, |
| 7359 | + |
| 7360 | + |
7271 | 7361 | /** |
7272 | 7362 | * Logs in a user with a mobile phone number and password. On success, this |
7273 | 7363 | * saves the session to disk, so you can retrieve the currently logged in |
|
0 commit comments