Swift 如何从用户注册API返回UID

Swift 如何从用户注册API返回UID,swift,rest,login,user-registration,Swift,Rest,Login,User Registration,在IOS swift Xcode7 API将用户注册到我的站点之后,如何从Drupal 7 REST服务返回用户ID?控制台返回状态200(OK),但不是注册的UID,我需要它来执行进一步的功能。我还需要在这里包含哪些代码行,或者可以作为单独的API添加哪些代码行 这是我的密码: import UIKit import Foundation import Alamofire import SwiftyJSON class submitVoteViewController: UIView

在IOS swift Xcode7 API将用户注册到我的站点之后,如何从Drupal 7 REST服务返回用户ID?控制台返回状态200(OK),但不是注册的UID,我需要它来执行进一步的功能。我还需要在这里包含哪些代码行,或者可以作为单独的API添加哪些代码行

这是我的密码:

 import UIKit
 import Foundation
 import Alamofire
 import SwiftyJSON

class submitVoteViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    // Do any additional setup after loading the view.
    print("loaded page1")
}

@IBAction func register(sender: AnyObject) {

    // register user

    let voteEndpoint: String = "https://www.example.com/ios1/user/register.json"
    let newVote = ["account":["name":"example name", "mail":"examplemail@gmail.com", "pass":"examplepass", "status":1]]
    Alamofire.request(.POST, voteEndpoint, parameters: newVote, encoding: .JSON)
        .response { request, response, data, error in
            print(request)
            print (response)
            print (error)
    }
}

当我查找时,Drupal站点显示UID为375(已阻止,尽管我已输入状态1,以便用户处于活动状态?)。控制台响应为

已加载的第1页 可选({URL:}) 可选({URL:}{状态代码:200,标题{ “缓存控制”=“无缓存,必须重新验证”; 连接=“保持活动”; “内容类型”=“应用程序/json”; 日期=“2016年7月16日星期六23:03:37 GMT”; Expires=“1978年11月19日星期日05:00:00 GMT”; “保持活动”=“超时=10,最大=200”; 服务器=Apache; “Set Cookie”=“DRUPAL_UID=0;expires=Fri,2016年7月15日23:03:37 GMT;最大年龄=-86401;路径=/;域=.example.com;安全,DRUPAL_UID=-1;expires=Tue,2016年8月9日02:36:57 GMT;最大年龄=1999999;路径=/;域=.example.com;安全”; “传输编码”=标识; “X-Content-Type-Options”=nosniff; “X-Powered-By”=“PHP/5.6.9”; } })
nil

您可以使用
response.result
处理响应。您的代码如下所示

Alamofire.request(.POST, voteEndpoint, parameters: newVote)
    .responseJSON { (response) in
        switch response.result {
            case .Success(let value) :
            let swiftyJSON = JSON(value)
            print(swiftyJSON)

            // let say your output is {"uid": "1000", "name": "bob"}
            // you could get the uid from this
            let name = swiftyJSON["uid"].stringValue 
    }

}

您可以使用
response.result
处理响应。您的代码如下所示

Alamofire.request(.POST, voteEndpoint, parameters: newVote)
    .responseJSON { (response) in
        switch response.result {
            case .Success(let value) :
            let swiftyJSON = JSON(value)
            print(swiftyJSON)

            // let say your output is {"uid": "1000", "name": "bob"}
            // you could get the uid from this
            let name = swiftyJSON["uid"].stringValue 
    }

}

根据服务部门的回复

HTTP/1.1 200 OK
Date: Sat, 23 Jul 2016 18:12:06 GMT
Server: Apache/2.4.17 (Unix) OpenSSL/1.0.1h mod_fcgid/2.3.9
X-Powered-By: PHP/5.6.19
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
X-Content-Type-Options: nosniff
Vary: Accept
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json

{"uid":"3","uri":"http://drupal-7-43.dd/Api/v1/user/3"}
因此响应对象应该附加一个uid


H44f33z的回答是正确的。

根据服务部门的回复

HTTP/1.1 200 OK
Date: Sat, 23 Jul 2016 18:12:06 GMT
Server: Apache/2.4.17 (Unix) OpenSSL/1.0.1h mod_fcgid/2.3.9
X-Powered-By: PHP/5.6.19
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
X-Content-Type-Options: nosniff
Vary: Accept
Connection: close
Transfer-Encoding: chunked
Content-Type: application/json

{"uid":"3","uri":"http://drupal-7-43.dd/Api/v1/user/3"}
因此响应对象应该附加一个uid


H44f33z的答案是正确的。

您的
打印(响应)
输出是什么?它应该是从那里刚刚得到的价值,由keyhi cod3rite,谢谢你的建议。我在上面添加了控制台响应。我看到它注意到“Set Cookie”=DRUPAL\u UID=0”,然后是DRUPAL\u UID=-1,但在DRUPAL站点中查找用户时显示UID为375,已阻止,尽管我已将状态输入为1表示活动。有什么想法吗?对不起,我是说
print(response.result.value
)或
print(data)
我在代码中添加了print(data)。除了返回相同的控制台消息外,它还添加了很多数字(太多字符,我无法在注释中添加),从;可选(PS)当我将打印(数据)添加到代码中时,它现在返回状态406您的
print(response)
输出是什么?应该从那里开始,通过keyhi cod3rite获取值,谢谢您的建议。我已经添加了上面的控制台响应。我在其中看到它注意到“Set Cookie”=DRUPAL\u UID=0,然后DRUPAL_UID=-1,但在DRUPAL站点中查找用户时,会显示375的UID,已阻止,尽管我已将状态输入为1以激活。有什么想法吗?抱歉,我的意思是
print(response.result.value
)或
print(data)
我在代码中添加了print(data)。除了返回相同的控制台消息外,它还添加了很多数字(注释中的字符太多,我无法在此处添加),以;可选开始(PS)当我向代码中添加打印(数据)时,它现在返回状态406hi cod3rite,谢谢这听起来很有希望…我收到一条红色警报错误消息,消息中说“如果让JSON=response.result.value,则行中没有成员结果”{“。有什么想法吗?非常感谢。我现在收到一个红色警报:“如果让JSON=response.result.value{”说‘元组类型的值’(NSURLRequest?,NSHTTPURLResponse?,result)”(又名‘Optional抱歉迟到了。我能知道你的alamofire版本吗?不用担心,谢谢。我非常感谢你的帮助。我正在使用alamofire 2.0.2和swiftyJSONI的可可豆,也许你可以在这里检查不同的。希望它能帮到你hi cod3rite,谢谢这听起来很有希望……我收到一条红色警报错误消息,上面写着“NSHTTPURLResponse类型的值?”在“if let JSON=response.result.value{”行中没有成员结果“。有什么想法吗?非常感谢。我现在收到一个红色警报:“if let JSON=response.result.value{”表示“元组类型的值”(NSURLRequest?,NSHTTPURLResponse?,result)”(又名'Optional抱歉迟到。我能知道你的alamofire版本吗?不用担心,谢谢。我非常感谢你的帮助。我正在使用alamofire 2.0.2和swiftyJSONI的可可豆。看,也许你可以在这里检查不同的。希望它能帮到你谢谢H44f33z和Kyle,它起作用了。确认工作代码是:Alam请求(.POST,voteEndpoint,参数:newVote,编码:.JSON).responseJSON{response in if let JSON=response.result.value{//JSON是您的服务器响应打印(“JSON:(JSON)”)//您从这个let name=JSON[“uid”]获取uid作为!StringHi Kyle和乐于助人的人,我在我的Xcode中使用了相同的代码,但在“if let JSON=response.result.value”行上收到了一条错误消息,错误是“类型NSHTTPURL response的值?没有成员“result”。我尝试将Alamofire更新为3.0,同样的错误。我以前发现这个错误经常出现-我想知道有一些关于代码放置的位置,或者是什么导致了这个?非常感谢您的想法。我在API之前添加了Base64credentials。谢谢H44f33z和Kyle,它成功了。确认工作代码是:Alamofire.request(.POST,voteEndpoint,参数:newVote,编码:.JSON).responseJSON{response in if let JSON=response.result.value{//JSON是您的