2012-11-23 74 views
2

我正在尝试创建用户注册表单并在注册时创建集合。 我试过下面的代码,但是当我尝试执行时,我得到这个错误: HTTP 400错误请求和页面无法显示。这里是代码:存在数据库用户注册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 

编码和解码你的密码。所以我是这样做的:

system:as-user((util:base64-decode(“bXBhcmF2YWM =”)),(util:base64-decode(“cGFzcw ==”)),(
(xdb:exists-user($ user)))然后( xdb:create-collection($ database-uri,$ user), xdb:create-user($ user,$ pass,'user' ()),
响应:重定向到($重定向-URI) )其他

用户存在

))

也有!另一种方式来做到这一点,更安全,看看this example

相关问题