ASP.NET для WordPress SSO с HttpWebRequest

Я пытаюсь создать единый знак на опыте между сайтом asp.net и сайтом wordpress, используя простой метод POST. Я создал простую страницу php, которая использует встроенные функции wordpress wp_insert_user и wp_signon для создания учетной записи пользователя в mysql db и подписала их. В моем коде страницы asp.net «создайте новый пользователь», я использую метод post HttpWebRequest для отправки необходимой информации на страницу php.

Он почти работает! Новый пользователь WordPress создан в базе данных mysql, но они не вошли в систему. Как я могу заставить WordPress регистрировать их?

ОБНОВЛЕНИЕ 11/29/11. Я добавил код, который использовал для его работы. Смотри ниже

Вот мой HttpWebRequest

Public Sub LoginToWordpress() 'This enables single sign on between our asp.net site and wordpress. Try 'get the values Dim uid As String = TxtLogin.Text Dim pwd As String = TxtPassword.Text 'format and encode the input data Dim encoding As New ASCIIEncoding() Dim postData As String = ("&UserName=" & uid) postData += ("&Pwd=" & pwd) Dim data As Byte() = encoding.GetBytes(postData) Dim cc As New CookieContainer() 'Prepare web request... Dim myRequest As HttpWebRequest = WebRequest.Create("http://www.mywebsite.com/speciallogin.php") myRequest.Method = WebRequestMethods.Http.Get myRequest.Method = "POST" myRequest.ContentType = "application/x-www-form-urlencoded" myRequest.ContentLength = data.Length myRequest.CookieContainer = cc Dim newStream As Stream = myRequest.GetRequestStream() 'submit the php form for BuddyPress signup newStream.Write(data, 0, data.Length) newStream.Close() 'Get the response Dim myResponse As HttpWebResponse = myRequest.GetResponse() Dim reader As New StreamReader(myResponse.GetResponseStream()) 'Look for cookies in the response If Not myResponse.Cookies.Count = 0 Then For Each c As Cookie In myResponse.Cookies 'Write the wordpress cookie to the browser Dim cookiename As String = c.Name Dim cCookie As New HttpCookie(cookiename) cCookie.Value = c.Value cCookie.Expires = c.Expires cCookie.Domain = ".mywebsite.com" cCookie.Path = "/" Response.Cookies.Add(cCookie) Next End If myResponse.Close() Catch ex As Exception Response.Write(ex) End Try End Sub 

Вот страница php (speciallogin.php)

  <?PHP include 'wp-load.php'; require_once( ABSPATH . WPINC . '/user.php' ); require_once( ABSPATH . WPINC . '/pluggable.php' ); //get the variables from the post of another page $u_username = $_POST['UserName']; $u_password = $_POST['Pwd']; //build the array $creds = array(); $creds['user_login'] = $u_username; $creds['user_password'] = $u_password; $creds['remember'] = true; //log the user in $user = wp_signon( $creds, false ); if ( is_wp_error($user) ) echo $user->get_error_message(); //see what happened if ( is_user_logged_in() ) { echo'log in failed'.'<br>'; } else { echo'login success!"<br>'; } wp_get_cookie_login() ; print_r($_COOKIE); ?> 

Из того, что я вижу, ваш код на стороне сервера отправляет запрос на wp-load.php, который создает и регистрирует пользователя (в сеансе веб-запроса на стороне сервера).

Я верю, что WordPress отправит куки-файлы на каждую страницу, поэтому вам придется извлекать файлы cookie из WebResponse и отправлять эти файлы cookie с вашей страницы asp.net, а также

Response.Redirect("http://localhost:1350/wp/");

Я не могу проверить это, поскольку на данный момент у меня нет WP-установки, и я не использую VB.net, но думаю, что это будет выглядеть примерно так:

 Dim cookies As New CookieContainer() Dim myRequest As HttpWebRequest = WebRequest.Create("http://localhost:1350/wpComm/createWPaccount.php") myRequest.Method = "POST" myRequest.ContentType = "application/x-www-form-urlencoded" myRequest.ContentLength = data.Length myRequest.CookieContainer = cookies; Dim newStream As Stream = myRequest.GetRequestStream() newStream.Write(data, 0, data.Length) newStream.Close() For Each c As Cookie In cookies Response.Cookies.Add(c) Next Response.Redirect("http://localhost:1350/wp/")