Avatar billede Slettet bruger
06. januar 2011 - 14:03 Der er 19 kommentarer

Logge på remote side og give en alert - usynligt

Hej eksperter,

Jeg har nogle brugere. De skal tilmelde sig via en tilmeldingsformular og efterfølgende registrere sig i et andet system. Jeg ønsker at slå de to ting sammen til eet (hvis det er muligt).

Konkret ønsker jeg, at man til sidst i tilmeldingsformularen har en side, hvor der er et felt til hhv. brugernavn og password og en submit-knap - der så logger brugeren ind på det REMOTE site og så kommer med en alert "Du har nu været logget på! Tak" (eller noget i den stil). Jeg ønsker altså IKKE at eks. lave en popup, hvor det remote site loades. Det skal ske usynligt for brugeren, de skal bare have en alert eller noget lignende?

SKAL man omkring curl (hedder det ikke det - kender det ikke for godt), eller?
Avatar billede repox Seniormester
06. januar 2011 - 14:28 #1
cURL vil være en oplagt mulighed for at lave noget dataudveksling for at oprette en bruger. Men jeg vil anbefale at kode et API, der kan skabe en kommunikationsplatform mellem de to sites.
Avatar billede Slettet bruger
06. januar 2011 - 15:11 #2
Hej, jeg har fundet dette script (Curl), og det virker ok. Den logger i hvert fald på. Men hvordan får jeg det til at angive at scriptet er kørt ok, og i modsat tilfælde til at melde tilbage hvis eks. username og password ikke matcher? Kan du gennemskue det?

<?php
//create array of data to be posted
$post_data['username'] = '...';
$post_data['password'] = '...';

//traverse array and prepare data for posting (key1=value1)
foreach ( $post_data as $key => $value) {
        $post_items[] = $key . '=' . $value;
}

//create the final string to be posted using implode()
$post_string = implode ('&', $post_items);

//create cURL connection
$curl_connection = curl_init('http://www.domainname.com/target_url.php');

//set options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

//set data to be posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

//perform our request
$result = curl_exec($curl_connection);

//show information regarding the request
print_r(curl_getinfo($curl_connection));
echo curl_errno($curl_connection) . '-' . curl_error($curl_connection);

//close the connection
curl_close($curl_connection);
?>
Avatar billede repox Seniormester
06. januar 2011 - 15:18 #3
Nej, det kan jeg ikke - jeg ved hverken hvilket sted, hvad output du får retur eller noget som helst andet om den løsning du forsøger at implementere.
Avatar billede Slettet bruger
06. januar 2011 - 15:21 #4
Jeg mente noget i stil med om man kunne sætte en if-then omkring "$result = curl_exec($curl_connection);" - altså hvis den er ok/går igennem, så vis bekræftelse, hvis ikke, så vis fejlmeddelelse.
Avatar billede repox Seniormester
06. januar 2011 - 15:28 #5
Hvis brugernavn og kodeord er korrekt, returneres siden med en HTTP status 200.
Hvis brugernavn eller kodeord ikke er korrekt, returneres siden med en HTTP status 200.

Så når du gerne vil kontrollere om curl kaldet går igennem, så vil den - uanset - returnere at forbindelsen gik fint. Så det vil ikke hjælpe dig.
Avatar billede Slettet bruger
06. januar 2011 - 15:37 #6
Ok, nej det kan jeg godt se. Er der andre måder at komme omkring det på?
Avatar billede repox Seniormester
06. januar 2011 - 16:04 #7
Det kommer jo helt an på hvad det er du gerne vil udveksle dataene igennem; problemet lige nu er bare at vi ved du gerne vil oprette en bruger et andet sted i samme omgang, og det vil du gøre ved at poste dataene til en eksisterende formular som vi hverken kender indholdet af eller mulige returværdier.
Avatar billede Slettet bruger
07. januar 2011 - 11:26 #8
Hej,

Brugeren skal nu kun logge ind (som vil være for første gang for vedkommende), ikke oprettes. Der skal kun sendes username og password fra min side/formular. Hvad mangler du af info (bare så jeg forstår dig rigtigt :-))?
Avatar billede repox Seniormester
07. januar 2011 - 11:38 #9
Jeg tror du ser for overordnet på sagen og har en forventning om at det er nemt at forstå hvor det er du vil hen med det her.

Det eneste jeg egentlig har fået ud af din beskrivelse er at du ønsker at logge en bruger ind, fra serverside, på et andet site efter brugeren har indtastet loginoplysningerne til det andet site på dit eget site.

Hvad er formålet? Skal du bruge nogle oplysninger eller skal du sende noget videre eller har det ikke nogen praktisk betydning hvilke returværdier der kommer tilbage? Hvad er det du gerne vil have der sker?
Avatar billede Slettet bruger
07. januar 2011 - 12:30 #10
Hej igen, tak for svar og tålmodighed ;-)

Men nej, jeg ønsker ikke der skal ske yderligere, jeg skal ikke bruge deres info til noget som helst. Jeg har bare brug for, at de logger på denne ene/første gang (fordi vi så kan lave noget i systemet i en anden sammenhæng, hvor det altså kræves, at brugeren HAR været logget ind). Men jeg vil gerne kunne tjekke, at de rent faktisk FÅR logget sig på (altså hvis de eks. taster forkert password). Men altså, selve login-scriptet på den remote side, er selvfølgelig ret omfattende. Men koden ovenfor logger altså fint brugeren ind - men (som du selv er inde på) - den skelner ikke om brugeren har logget korrekt ind el. der er sket en fejl.
Avatar billede repox Seniormester
09. januar 2011 - 11:28 #11
Du kan gøre det at du returnerer indholdet fra dit curl kald og kontrollerer at fejlmeddelselsen ikke er opstået.

Hvis fejlmeddelsen ved forkert login på siden er noget ala: "Du tastede forkert brugernavn eller kodeord" kan du jo gøre noget ala:
<?php
  // dit CURL kald
  ...

  if( stristr($result, "forkert brugernavn eller kodeord") )
  {
    echo "Brugeren blev ikke logget ind på det andet site."
  }

  ...
?>
Avatar billede Slettet bruger
09. januar 2011 - 12:03 #12
Vil det betyde noget i den sammenhæng om sitet (det remote) er https? Jeg har lige prøvet med en udgave af det remote site som er alm. http og her virker det fint, mens det med https ikke viser din fejlmeddelelse...
Avatar billede repox Seniormester
09. januar 2011 - 13:05 #13
Det er fordi cURL mangler nogle informationer om din HTTPS udveksling - den hurtige måde at løse det på er:

curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
Avatar billede Slettet bruger
09. januar 2011 - 14:56 #14
Hmm den er faktisk allerede med...? (se kode ovenfor > http://www.eksperten.dk/spm/928165#reply_7712792 )
Avatar billede repox Seniormester
09. januar 2011 - 15:05 #15
Nå, det så jeg ikke lige - men det er ikke muligt for mig at pinpointe problemet med de få oplysninger der er.
Avatar billede Slettet bruger
09. januar 2011 - 15:32 #16
Nedenfor er hvad jeg får retur med en print_r(curl_getinfo($curl_connection));

HTTPS - her er username angivet forkert, så der bliver altså IKKE logget ind korrekt. Ved HTTP er der logget korrekt ind, som det skal...

Med HTTPS
Du har nu været logget ind! Tak!

Array ( [url] => https://www.login.com/index.php [content_type] => text/html; charset=utf-8 [http_code] => 200 [header_size] => 692 [request_size] => 246 [filetime] => -1 [ssl_verify_result] => 20 [redirect_count] => 0 [total_time] => 1.404 [namelookup_time] => 0.047 [connect_time] => 0.453 [pretransfer_time] => 0.874 [size_upload] => 34 [size_download] => 9311 [speed_download] => 6631 [speed_upload] => 24 [download_content_length] => -1 [upload_content_length] => 0 [starttransfer_time] => 1.404 [redirect_time] => 0 [certinfo] => Array ( ) )

Med HTTP
Du har nu været logget ind! Tak!

Array ( [url] => http://www.login.com/index.php [content_type] => text/html; charset=utf-8 [http_code] => 200 [header_size] => 1909 [request_size] => 559 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 2 [total_time] => 0.624 [namelookup_time] => 0 [connect_time] => 0 [pretransfer_time] => 0 [size_upload] => 69 [size_download] => 8757 [speed_download] => 14033 [speed_upload] => 110 [download_content_length] => -1 [upload_content_length] => 0 [starttransfer_time] => 0.187 [redirect_time] => 0.375 [certinfo] => Array ( ) )

I HTTPS står der [ssl_verify_result] => 20, mens den er 0 i HTTP, men om det er nok for dig, ved jeg ikke?!
Avatar billede repox Seniormester
09. januar 2011 - 15:45 #17
Jeg kan ikke bruge de oplysninger til noget...
Avatar billede Slettet bruger
09. januar 2011 - 15:51 #18
Bevares, men hvad mangler du så?
Avatar billede repox Seniormester
09. januar 2011 - 16:01 #19
Jeg tror ikke du forstår essensen i det jeg har sagt gennem hele tråden; jeg famler i blinde om oplysninger jeg ikke kender - at give mig resultatet af cURL kaldets oplysninger har ingen relevans for det du forsøger at opnå, udover det kan konstateres at du rammer en side der returnerer status 200 i begge tilfælde.

Der er ingen - ud fra de oplysninger der er - der kan 'gætte' sig frem til hvorfor det ikke lige virker med HTTPS for dig; der kan være flere årsager og aspekter som spiller ind, der kan bevirke lige netop din løsning.

For at kunne komme med et kvalificeret bud, skal jeg vide hvor du forsøger at logge dig ind, og hvad du kan logge ind med, for at opnå et succesresultat. Kun på den måde har jeg mulighed for at afgøre hvad det er der driller i HTTPS.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester