2014-07-04 4 views
2

currentUser하여 PFUser 객체를 쓰기 PFUser의 currentuser가 아닌 현재 사용자 개체를 쓸 수 없습니다, 난 구문 분석 개발자 가이드에 따라 ACL를 추가했습니다,하지만 난 여전히 오류 얻을 :내가 좋아하는 것

'User cannot be saved unless they have been authenticated via logIn or signUp'  

는 _ 내 코드 :

PFQuery *query = [PFUser query]; 
    [query whereKey:@"username" equalTo:self.bBo]; 
    PFObject *friendData = [query getFirstObject]; 

    PFUser *user = (PFUser *)friendData; 

    PFACL *userACL = [PFACL ACL]; 

    user.ACL = userACL; 

    [userACL setWriteAccess:YES forUser:[PFUser currentUser]]; 

    PFRelation *friendRelation = [user relationforKey:@"array"]; 
    [friendRelation addObject:[PFUser currentUser]]; 

    [user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (error){ 
      NSLog(@"Error %@ %@", error, [error userInfo]); 
     } 
    }]; 

나는 내가 모든 것을 정확했다고 생각, 그래서 문제가 될 수 있는지 알아낼 수 없습니다. 따라서 이전에 이와 같은 것을 만들었거나 문제가있는 부분을 알고 있다면, 나는 정말로 어떤 제안이라도 고맙게 생각합니다. 당신이하고 user에 변경 사항을 저장 할 수있게하려면 구문 분석은 현재 로그인하지 않은 사용자에게 변경 사항을 저장하도록 허용하지 않습니다

보안상의 이유로

답변

10

.

, 당신은 사용할 필요가 Cloud CodeMaster Key이이 장애물을 해결합니다.

저는 전에 이런 문제가 여러 번 있었으며 때로는 Cloud Code을 통해 해결 방법을 사용해야했습니다.

[PFCloud callFunction:@"editUser" withParameters:@{@"userId": user.objectId}]; 

위의 코드 문이 엑스 코드에, 나는 내 Cloud Code 파일에 추가 한 기능을 실행 :

는 여기에 내가 두 사용자 사이의 친구 관계를 만들기 위해 한 해결 방법의 예입니다.

Parse.Cloud.define('editUser', function(request, response) { 
    var userId = request.params.userId; 

    var User = Parse.Object.extend('_User'), 
     user = new User({ objectId: userId }); 

    var currentUser = request.user; 

    var relation = user.relation("friendsRelation"); 
    relation.add(currentUser); 

    Parse.Cloud.useMasterKey(); 
    user.save().then(function(user) { 
     response.success(user); 
    }, function(error) { 
     response.error(error) 
    }); 
}); 

위의 코드는 변경 사항을 저장하기 위해 Master Key를 사용하여 모두 현재 사용자, 그리고 OBJECTID이 함수로 전달의 사용자로 로그인 :

그런 다음, 여기처럼 내 Cloud Code 파일이 어떻게 표시되는지를 보여줍니다.

코드 세부 사항 : 위의 함수에서

user.relation("friendsRelation"); 

, "friendsRelation" 내 PFRelation의 이름입니다

var relation 

이 무엇 다음 fucntion 반환 내가 잡고 만드는거야 단지 변수 파스를 입력하십시오.

변수에 relation이라는 유효한 관계 개체가 포함되었으므로이 함수는 currentUser 개체의 인수로이 함수를 실행합니다.

그 후에 남은 것은 모든 것을 저장하는 것입니다. 나는 자바 스크립트로 프로그래밍하지 않지만, 위의 솔루션을 Parse Cloud Code 문서를보고 지원 포럼에서 검색함으로써 여전히 얻을 수있었습니다.

위에서 템플릿을 가져 와서 약간 변경하면 필요한 것을 쉽게 얻을 수 있습니다. Parse SDK은 누군가 자신의 잘못이나 개발자의 실수로 다른 사람의 계정에 로그인하고 어떻게 든 변경할 수있는 상황을 원하지 않기 때문에 이러한 여분의 상황을 뛰어 넘기 만하면됩니다.

는 편집 : 여기

는 현재 사용자의 관계를 추가하는 코드 :

PFRelation *friendsRelation = [[PFUser currentUser]relationforKey:@"friendsRelation"]; 

    PFUser *user = [self.parseUsers objectAtIndex:indexPath.row]; 

    [friendsRelation addObject:user]; 
    [currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     if (error) { 
      NSLog(@"%@ %@", error, [error userInfo]); 
     } 
    }]; 

을 그리고 당신은 후 바로 클라우드 코드 메서드를 호출 할 수 있습니다 :

[PFCloud callFunction:@"editUser" withParameters:@{ 
                 @"userId": user.objectId 
                 }]; 
+0

그것을인가 법적 해결책? 제 말은, 애플이 그것을 받아 들일 것입니까? 개발자는 코드를 검토 할 수 없기 때문에 CloudCode에서 실행됩니다. – rihe

+0

완벽하게 작동하며 현재 사용자가 아닌 사용자에 대해서만 관계를 설정합니다. 그러나 나는 두 버전의 관계를 설정하는 다른 버전을 사용하려고합니다. 아마 당신은 왜 그것이 작동하지 않는지 알 수 있습니까? 나는 그것을 편집하지 않았다. – rihe

+0

예 법적 해결책입니다. Apple은 어쨌든 알 방법이 없으며 Parse 관리자가 마스터 포럼에서 지원하는 마스터 키 솔루션을 권장합니다. – user3344977

관련 문제