I want to create a form in C#.net which can sign me in through a drupal website. Service 3.x module is enabled and Rest server is running on my website correctly. My only problem is how to serialize the username and password into json format?
2 Answers
Finally a solution :
I've got a windows form , contains a textbox , a masked-textbox and a button (called button3 below) ,
on button click event , the textbox and maskedtextbox contents will placed in the user object which is constructed using this class :
class User
{
public string username;
public string password;
public string name;
public string number;
public string address;
public string email;
public User(string user, string pass, string name = "", string number = "", string address = "", string email = "")
{
this.username = user;
this.password = pass;
this.name = name;
this.number = number;
this.address = address;
this.email = email;
}
}
then converted this object into json model using Json.net library
in the rest it makes a request the incoming cookie will store in cookieJar and for rest Requests you must copy this cookieContainer into your request cookieContainer and you will stay logged in. this is the rest of Code :
private void button3_Click(object sender, EventArgs e)
{
CookieContainer cookieJar = new CookieContainer();
User user = new User(textBox1.Text,maskedTextBox1.Text);
string url = "http://"your-web-address"/"your-rest-service"/?q="your-resurce"/user/login.json";
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "POST";
request.CookieContainer = cookieJar;
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string query = JsonConvert.SerializeObject(user);
streamWriter.Write(query);
streamWriter.Flush();
streamWriter.Close();
}
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var responseText = streamReader.ReadToEnd();
}
//Check to see if you're logged in
url = "http://web-address/rest-server/?q=resurce/system/connect.json";
var newRequest = (HttpWebRequest)WebRequest.Create(url);
newRequest.CookieContainer = cookieJar;
newRequest.ContentType = "application/json";
newRequest.Method = "POST";
var newResponse = (HttpWebResponse)newRequest.GetResponse();
using (var newStreamReader = new StreamReader(newResponse.GetResponseStream()))
{
var newResponseText = newStreamReader.ReadToEnd();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(), "Can't access server");
}
}
note: Second request is just to test if drupal knows me.
- 171
- 17
Your question is quite ambiguos, but i could show you the method to log in.
To Log in into Drupal Site using services you can enable the user resource and the actions Log in ( and Logout ).
Use the following to log in, ( make changes according to your set-up).
URL
- HOST: "http://www.yourserver.com"
- PATH: "/service-end-point/user/login"
METHOD
- POST CONTENT-TYPE: application/json
BODY
- RAW Input:
{ "username":"demo@gmail.com", "password":"demo" }
- 1,241
- 9
- 12
-
Well I'm looking for a solution in c#.net . I mean how should I do that? I can call a httprequest but can't save session:( – Alireza Tabatabaeian Apr 21 '13 at 22:30
-
I have not implemented session-less solution, so can't help you regarding that. After reading this article http://stackoverflow.com/questions/319530/restful-authentication i gave up my pursuit for pure RESTful webservices and drupal :( – D34dman Apr 27 '13 at 18:11