我正在使用Sync Gateway 2.1和Couchbase Server 6.0在android上设置Couchbase Lite。
我已经使用OpenID Connect隐式流程对Google登录进行了身份验证,并且能够获取用于身份验证的会话Cookie。
现在,我需要授权才能在SGW配置文件的javascript中使用“ requireUser()”功能,但我无法让SGW为我创建用户。
根据我在文档中看到的内容,在配置文件中设置<!DOCTYPE html>
<html>
<head>
<title>Realtime communication with WebRTC</title>
<link rel="stylesheet" href="css/main.css" />
</head>
<body>
<table id="pressme" style="width:100%" bgcolor="red" height =500px>
<button id="myBtn">Try it red</button>
</table>
<table id="showme" style="width:100%;display:none;" bgcolor="green"height=500px>
<button id="myBtn1" style=display:none; >Try it green </button>
</table>
</body>
</html>
应该会使SGW在不存在的情况下自动创建用户,但是在发送请求时,我会不断收到"register":true
响应到Unauthorized
为主体/_session
。
我无法通过SGW自动创建用户吗?我已经设置了隐式流身份验证,以避免必须管理自己的Web应用程序进行授权,因此我想避免必须使用Admin rest API来创建用户。
这是我的SGW配置文件:
{ "name": "new_user_name" }
编辑: 这是我的请求日志:
{
"log": ["*"],
"adminInterface": ":4985",
"databases": {
"lucidity": {
"server": "http://xxx.xxx.xxx.xxx:8091",
"bucket": "bucketname",
"username": "syncgateway",
"password": "***********",
"num_index_replicas": 0,
"enable_shared_bucket_access": true,
"import_docs": "continuous",
"oidc": {
"providers": {
"GoogleAuthFlow": {
"issuer":"https://accounts.google.com",
"client_id":"xxxxxxxxxxxxx.apps.googleusercontent.com ",
"validation_key":" xxxxxxxxxxxx",
"callback_url": "http://xxx.xxx.xxx.xxx:4984/bucketname/_oidc_callback",
"register":true
}
}
},
"users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } },
"sync": `function (doc, oldDoc) {
}`
}
}
答案是
POST http://xx.xx.xx.xx:4984/bucketname/_session
Content-Type: application/json
Content-Length: 2
Authorization: [MY_ID_TOKEN_HERE]
Body: { }
具有以下Set-Cookie标头:
{
"authentication_handlers" : [ "default", "cookie" ],
"ok" : true,
"userCtx" : {
"channels" : {
"!" : 1,
"*" : 1
},
"name" : null
}
}