目标:
我希望我的Web应用程序能够在Drupal站点上向Drupal站点发送用户的用户名和密码,并让Drupal站点响应并确认用户身份验证信息是否正确.
另一个需要是让Drupal服务器返回创建的会话的会话ID,以及用户的信息,如电子邮件,用户角色等.
到目前为止我所拥有的:
我启用了Services Rest Server,并在www.mysite.com/rest/上创建了一个端点.我只将响应格式设置为json,并请求解析器到application/x-www-form-urlencoded.我已通过会话,调试模式打开身份验证.我还确保为此端点启用整个用户资源.导航到www.mysite.com/rest/user会给我一个包含所有用户的列表.
关于我的身份验证尝试,我尝试发送请求:
POST www.mysite.com/rest/user/login
Content-Type: application/x-www-form-urlencoded
POST Body:
name:admin,
pass:myadminpassword
Run Code Online (Sandbox Code Playgroud)
但它只是不断返回401 Unauthorized响应.我已经仔细检查过,并且auth信息是正确的.我尝试过其他参数名称的变体,例如:(用户名,密码),(用户,密码),(名称,密码)等.
我似乎无法登录工作,我已经查看了我在Stackoverflow上找到的其他示例,但他们没有工作.
SELECT u.users_username, u.givenname, u.familyname, u.studentassent, u.parentconsent, u.birthdate, u.gender
FROM users AS u
JOIN classes_users as c
ON c.users_username = u.users_username
JOIN classes_users as x
ON c.classes_id = x.classes_id
WHERE x.users_username = "johnny" AND x.role = "teacher"
Run Code Online (Sandbox Code Playgroud)
要么
SELECT u.users_username, u.givenname, u.familyname, u.studentassent, u.parentconsent, u.birthdate, u.gender
FROM users AS u
WHERE u.users_username
IN (
SELECT c.users_username
FROM classes_users as c
JOIN classes_users as x
ON c.classes_id = x.classes_id
WHERE x.users_username = "johnny" AND x.role = "teacher"
)
Run Code Online (Sandbox Code Playgroud)
我认为第一个更好,但我仍然在学习如何编写更好的SQL语句我不清楚在这种情况下使一个语句比另一个语句更好的所有内部结构.
如果有比我写的两种方式更好的方式来写它们,请告诉我.谢谢.
编辑:有老师和学生.通过查看classes_users表,可以找到他们在任何给定班级中作为学生或教师的位置.我想要做的是给用户,找到他是教师的课程,然后返回这些课程中的所有学生.
这是我的数据库架构: …
我有一个有几个输入元素的表单.输入元素值设置为范围变量.有一个带有ng-click指令的按钮,它包含使用某些逻辑(从作用域变量调用其他方法)的代码,以通过作用域变量确定和设置输入元素值:
<input value="{{variableToBeSetOnButtonClick}} ...>
<button ng-click="setFormInputValues();submitForm();" ...>
myApp.directive('...', function() {
return {
link: function(scope, element) {
var setFormInputValues = function() {
scope.variableToBeSetOnButtonClick = scope.objFromOtherDirective.getValue();
};
var submitForm = function() {
$(element).find("form")[0].submit()
};
}
Run Code Online (Sandbox Code Playgroud)
这个问题是$ apply在执行所有ng-click函数之后才执行,因此在调用submit()时尚未设置输入值.
也许有更好的方法来做到这一点?我能找到的唯一解决方案是将一个$ watch放在variableToBeSetOnButtonClick上,它调用submit(),并尝试在该回调中取消注册$ watch,但这看起来很糟糕.