2012-11-23 4 views
2

사용자 등록 양식을 만들고 등록시 컬렉션을 만들려고합니다. 다음 코드를 시도했지만 시도 할 때이 오류가 발생합니다. HTTP 400 잘못된 요청 페이지를 표시 할 수 없습니다. 여기에 코드가 있습니다 :존재 db 사용자 등록 xquery

xquery version "1.0"; 

declare namespace request="http://exist-db.org/xquery/request"; 
declare namespace response="http://exist-db.org/xquery/response"; 
declare namespace xdb="http://exist-db.org/xquery/xmldb"; 
declare option exist:serialize "method=xhtml media-type=text/html indent=yes"; 
declare variable $database-uri as xs:string { "xmldb:exist:///db" }; 
declare variable $redirect-uri as xs:anyURI { xs:anyURI("login.xql") }; 

    declare function local:header() as node(){ 
<div style="background-color:#b0c4de; padding: 20px; border: 1px solid black;"> 
<h1>test</h1> 
</div> 
}; 

declare function local:footer() as node(){ 
<div style="background color:#eee; height: 1%; padding:20px; border: 1px solid black;"> 
<p>PROJECT</p> 
</div> 
};  

declare function local:reg($user as xs: string) as element()? 
{ 
let $password := request:get-parameter("password", "") 
let $password2 := request:get-parameter("password2", "") 
return 
    if (not(xdb:exists-user($user))) then ( 
    xdb:create-collection($database-uri, $user), 
    xdb:create-user($user, $password, "guest",()), 
    response:redirect-to($redirect-uri) 
    ) else 
     <p>User already exists!</p> 
}; 

declare function local:do-reg() as element()? 
{ 
    let $user := request:get-parameter("user",()) 
    return 
     <p>{$user}</p> 
     if($user) then 
      local:reg($user) 
      else() 
}; 

<html> 
<head><title>Registration</title> 

</head> 
<body> 
{local:header()} 
    <h1>Forma for reg</h1> 
    <form action="{request:get-uri()}"> 
    User Name: <br /> 
    <input type="text" name="user" size="20" /> 
    <br /> 
    Password: <br /> 
    <input type="password" name="password" size="20" /> 
    <br /> 
    Confirm: <br /> 
    <input type="password" name="password2" size="20" /> 
    <br /> 

    <input type="submit" /> 
    <input type="reset" name="reset" value="Clear" /> 
    </form> 
    {local:do-reg()} 
    {local:footer()} 
    </body> 
</html> 

제발, 내가 xquery와 존재 db에서 초보자입니다. 미리 감사드립니다!

답변

2

내가 그것을 가지고, 당신은 당신이 전리품의 DB 그룹에없는 경우 새로운 사용자를 등록 할 수 없습니다. 그래서해야 할 일은 수집을위한 새로운 사용자를 생성하고 적절한 권한을 부여하는 것입니다. 그런 다음 새 사용자를 등록/생성하려면 해당 사용자와 로그인해야합니다.

xmldb:login('/db/yourcollection', $admin, $password) 
          . 
          . 
          . 
        your registration code 

이의 문제는 당신이 당신의 .xql 문서 관리 사용자와 암호를 넣어 - 그리고 그건 좋은 생각이 아니다. 하지만 당신은 사용할 수 있습니다

util:base64-encode

util:base64-decode 

인코딩하고 암호를 해독 할 수 있습니다. 그래서 내가 어떻게 한거야 :

시스템 : 사용자 ((util : base64-decode ("bXBhcmF2YWM =")), (util : base64-decode ("cGFzcw ==")), (
xdb : create-user ($ user, $ pass, 'user') xxx : create-collection ($ database-uri, $ user)()),
응답 : 재 -에 ($ 다른

사용자가

도 있습니다)) 존재

)) 를 리디렉션 URI! 더 안전하게이 작업을 수행 할 수있는 또 다른 방법은 다음과 같습니다. this example