我在liferay实例上有几个用户帐户需要注册。我在保险库中有他们的用户名和密码,并希望编写他们的注册脚本,因为使用带有这些用户名和密码的webservices似乎与登录一次有关。
我一直在尝试屏幕抓取我的登录屏幕并生成curl的帖子请求,但它无法正常工作。
这是我的“单行”
password=$(grep "PASSWORD" /etc/default/website_creds | cut -d= -f2);
username=$(grep "USERNAME" /etc/default/website_creds | cut -d= -f2);
curl -s https://mysite.obfuscated_company_name.com |\
grep -o 'form action="https://mysite.obfuscated_company_name.com/home;jsessionid.*Flogin%2Flogin"' |\
grep -o "https.*Flogin%2Flogin" |\
sed "s/&/\&/g" |\
while read url;\
do curl "$url&_58_login=$username&_58_password=$password";\
done
这有效吗?
答案 0 :(得分:3)
我认为如果不使用Liferay,你会使用它的JSON-WS API,你会更高兴。让我们看看它是否会对你有帮助。
只需访问https://mysite.obfuscated_company_name.com/api/jsonws即可。如果您获得了成功,您将在浏览器中看到类似的内容:
在“搜索”框中输入add-user
。你应该得到这样的东西:
您将点击“用户”部分下的任意add-user
选项。我推荐第二个,这个更短。
现在,你得到一个这样的页面:
这基本上是来自用户服务的UserService.addUser()
方法的文档。
有趣的部分是可以在页面下方找到的表格:
此表单的每个字段都是UserService.addUser()
的参数。当我们提交此表单时,我们调用此方法,将新用户保存在数据库中!
所以,为了理解它是如何工作的,让我们填写表格:
select companyId from Company;
轻松找到。autoPassword
选项应该是false,因为我们确实要定义密码(它们来自文件,对吗?)password1
中输入任意内容,然后在password2
中重复此操作。
**这可能看起来有点令人费解,因为必须输入两次。你是对的,是的。较旧的Liferay API非常复杂。抱歉。但它比报废更好!autoScreenname
也应该是假的。screenname
字段中输入一些随机屏幕名称,仅用于此测试。emailAddress
,发送电子邮件。facebookId
是不必要的,但由于它是一个数字,我们必须在其上加0。openId
和locale
可以为空。firstName
和lastName
。prefixId
和suffixId
可以为0. birthday
字段中添加一些值。它们是数字的,所以我们需要填充它们。是的,这是令人费解的。现在点击“调用”。如果出现任何问题,“结果”选项卡中将显示一条错误消息。如果一切顺利,而不是错误,您将以JSON形式获得结果。像这样:
现在,如果您转到“控制面板>用户>用户和组织”,voilà,那就是您的用户。
当然,表单本身不会对您的脚本有所帮助。好处是,除了“结果”选项卡之外,还有一个“卷曲示例”选项卡。它将包含以下内容:
curl http://localhost:8080/api/jsonws/user/add-user \
-u test@liferay.com:test \
-d companyId=20114 \
-d autoPassword=false \
-d password1='pass' \
-d password2='pass' \
-d autoScreenName=true \
-d screenName='user2' \
-d emailAddress='liferay.for.testing+2@gmail.com' \
-d facebookId=0 \
-d openId='' \
-d locale= \
-d firstName='user' \
-d middleName='' \
-d lastName='2' \
-d prefixId=0 \
-d suffixId=0 \
-d male=true \
-d birthdayMonth=1 \
-d birthdayDay=1 \
-d birthdayYear=1970 \
-d jobTitle='' \
-d groupIds= \
-d organizationIds= \
-d roleIds= \
-d userGroupIds= \
-d sendEmail=true
这个是你的curl命令。你将不得不改变一些东西:
-u test@liferay.com:test
替换为您网站的真实管理员用户。-d password1='pass' -d password2='pass'
中的“pass”替换为变量。-d username
选项相同。然而,这些都是细节。 API可以帮助您解决困难问题。