当所有用户 ACL:Public 读/写被禁用时,如何检查用户名是否被 parse.com 使用? [英] How do I check if a username is taken with parse.com when all User ACL:Public read/write is disable?
问题描述
当 ACL:Public read/write 在 User 类中的所有用户中禁用时,如何检查用户名是否被 parse.com Javascript SDK 使用?
说明:出于安全原因,我在 class/table User 中的所有用户都有一个 private ACL(访问控制列表),或者换句话说,公共读/写的 ACL 被禁用,这意味着经过身份验证的用户可以读取 <强>仅他们自己的信息.
您可以想象任何对用户的查询都会对未登录的用户变为空因此无法通过在用户类上使用查询来检查用户是否已被占用
我设法通过 singUp 一个新用户来解决这个问题,然后 Parse 将返回一个 400 错误和一些好的信息:
{code: 202, 错误:用户名测试已经进行"}
这种方法的问题在于,当用户在文本区域字段上输入时,我正在实时进行验证:
HTML AngularJS:
Javascript AngularJS:
$scope.doesNotExist = 函数(值){Parse.initialize(KEY0, KEY1);var deferral = $q.defer();var user = new Parse.User();user.set("用户名", "测试");user.set("密码", "anyapssword");用户注册(空,{成功:功能(用户){//万岁!现在就让他们使用该应用程序.console.log("成功!");//Holly shit 现在我必须删除用户 :( 并等待提交完整表格用户.销毁({成功:功能(我的对象){//该对象已从 Parse Cloud 中删除.console.log("销毁!!!!!!!!!!!!");},错误:函数(我的对象,错误){//删除失败.//error 是带有错误代码和消息的 Parse.Error.console.log("销毁失败!!!!!!!!!!!!");}});deferral.resolve(用户);},错误:函数(用户,错误){console.log("错误:" + error.code + " " + error.message);deferral.reject("mierda!");}});返回 deferral.promise;};
那么当 ACL:Public read/write 被禁用时,我如何检查用户名是否被 parse.com 使用?
我正在使用 AngularUI 插件进行快速验证:https://htmlpreview.github.io/?https://github.com/angular-ui/ui-validate/master/demo/index.html>
谢谢!
我找到了自己的答案.如果有人在这里查看我在 AngularJS 和 Parse.com 中所做的事情.为了节省一些时间,我使用了来自 AngularUI 的 Validate 插件.
HTML:
<html lang="en" ng-app="demo"><头><meta charset="utf-8"><title>AngularJS ui-validate</title><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.1/angular.js"></script><link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css"/><script type="text/javascript" src="http://www.parsecdn.com/js/parse-1.6.14.min.js"></script><!-- ui-validate 文件--><script src="../dist/validate.js"></script>头部><body class="容器"><脚本>var app = angular.module('demo', ['ui.validate']);app.controller('ValidateCtrl', function ($scope, $timeout, $q) {$scope.doesNotExist = 函数(值){Parse.initialize("uO...rPt", "8Bu...1mxFr");var deferral = $q.defer();Parse.Cloud.run('mgxIsNameAlreadyTaken', {username: value}, {成功:功能(结果){console.log("httpRequest resultado:" + result);//结果是 'Hello world!'延迟解决();},错误:函数(错误){console.log("si! ya esta tomado!:" + error);deferral.reject();}});返回 deferral.promise;//返回真;};});<section id="validate" ng-controller="ValidateCtrl"><div class="page-header"><h1>验证</h1>
<h3>什么?</h3><div class="row"><div class="col-md-6"><p><code>ui-validate</code>和<code>ui-validate-async</code>指令使创建变得非常容易自定义验证器表达式.</p><div class="well"><表格名称=表格"><h3>电子邮件</h3><input class="form-control"名称=电子邮件"placeholder="试试 john.doe@mail.com 或 bad@domain.com"类型=电子邮件"需要 ng-model="email"ng-model-options="{ 去抖动:500 }"ui-validate-async="{alreadyExists: 'doesNotExist($modelValue)'}"><span ng-show='form.email.$error.blacklist'>此电子邮件已列入黑名单!</span><span ng-show='form.email.$error.alreadyExists'>此电子邮件已已被接收!</b></span><span ng-show='form.email.$pending'>正在服务器上验证电子邮件...</span><span ng-show='form.email.$valid'>此电子邮件有效.</span><br>表单有效:{{form.$valid}}<br></表单>