2

ユーザー登録フォームを作成し、登録時にコレクションを作成しようとしています。次のコードを試してみましたが、実行しようとすると次のエラーが発生します: HTTP 400 Bad Request and page cannot be displayed. コードは次のとおりです。

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が存在します。前もって感謝します!

4

1 に答える 1

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==")), (
if (not(xdb:exists-user($user))) ) 次に ( xdb:create-collection($database-uri, $user), xdb:create-user($user, $pass, 'user', ()),
response:redirect-to($redirect-uri) )そうしないと

ユーザーが存在します!

) )

また、これを行う別の方法があり、さらに安全です。この例を見てください

于 2012-11-27T18:54:22.163 に答える