phpBB Forum und Login

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • phpBB Forum und Login

    Hallo Entwicklergemeinde,

    ich bin etwas neu auf dem Gebiet der OSx Programmierung, habe aber auch schon zahlreiche Bücher gelesen und auch gekauft. Ich wollte mal anfragen, ob es möglich ist, sich über das iPhone per Objective-C in ein phpBB Forum einzuloggen, also sozusagen dass ich mir ein Username und Password Feld erstelle und dort der Benutzer dann seine Daten eingibt und sich dann per Login Button am Forum anmeldet. Ich habe mal schon ein wenig den PHP Code vom Forum durchforstet um zu sehen wo der Login abgefangen wird, nur weiß ich nicht wie ich dann an dieses PHP Skript den Username und das Password über die App übergebe. Vielleicht kann mir jemand eine kleine Ansatzhilfe geben wie ich das bewerkstellige.

    mfg
    [window close]
  • Hmmm, bin gerade am überlegen, denke mal die Taptalk Engine ist ja das was ich in meine App einbauen muss damit das funktioniert mit dem Forum und da steht dann bei Lizenz dass die 999$ kostet. Aber widerum gibts eine API fürs iPhone. Oder ist das so gemeint dass ich eine eigene App bauen kann die so ähnlich ist wie Taptalk und sie dann nur anders nenne und vielleicht paar mehr Features einbaue?
    [window close]
  • App Development
    This API also allows you to develop your own app that works with any Tapatalk-activated forum system. This is especially useful if you are running a large community and would like to develop your own app. It allows you:


    As an app developer, there is no cost of using this API, however you agree that:

    • Mentioning of "Tapatalk" in your product communication, news, website, announcement. A short phase such as "Tapatalk compatible client" would suffice.
    • Add "Powered by Tapatalk" within your app predominantly.
    • Not redistributing our plugins and any other copyrighted materials.

  • Also ich hab mich da mal registriert, aber wie ich sehe ist die API nur für PHP geschrieben also muss man sich sozusagen da auch erst wieder was in Obj-C basteln um auf die PHP API zugreifen zu können, weil einen Download-Link habe ich jetzt was Obj-C betrifft nicht gefunden.
    [window close]
  • Bau dir am besten selbst eine kleine Schnittstelle. Mit meiner damaligen ForenAPp habe ich auch die Schnittstelle von Tapatalk misbraucht, aber diese war mir auf dauer zu unhandlich. Was hindert dich daran, selbst eine Schnittstelle zu bauen und dir alle nötigen Daten in einem JSOn string zu verpacken und in der App auszuwerten?

    Im Grunde brauchst du ja nicht viel mehr machen als:

    Request annehmen
    DB verbindung aufbauen
    Daten aus DB holen
    Daten verarbeiten
    Daten als Json rausgeben.

    Nun einfach in der App verarbeiten. Ist alles in allem nicht besonders viel Aufwand, wenn man weiss welche DB Tabelle benötigt wird.
  • Danke für die Antwort, so weit bin ich noch gar nicht, mir geht es erst mal hauptsächlich um den Login damit ich mich über die App im Forum anmelden kann. Das mit den Daten auswerten wird wohl der nächste Schritt sein, der aber denke ich mal nach erfolgreichem Login einfacher ist als die Anmeldung am Forum, da ich wie schon gesagt nicht weiß wie ich die Parameter für Username und Password übergeben soll.
    [window close]
  • Mit ASIHTTPRequest bekommst Du den Login an phpBB3 recht einfach zustande:

    Quellcode

    1. -(void) doLogin {
    2. NSURL *url = [NSURL URLWithString:@"http://serveradresse/ucp.php?mode=login"];
    3. ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    4. [request setPostValue:@"hier der benutzername" forKey:@"username"];
    5. [request setPostValue:@"hier das passwort" forKey:@"password"];
    6. [request setPostValue:@"dummy" forKey:@"login"];
    7. [request setUseCookiePersistence:NO];
    8. [request setDelegate:self];
    9. [request setDidFinishSelector:@selector(requestFinished:)];
    10. [request setDidFailSelector:@selector(requestFailed:)];
    11. [request setTimeOutSeconds:2];
    12. [request setRequestMethod:@"POST"];
    13. [request startAsynchronous];
    14. }
    15. - (void)requestFinished:(ASIHTTPRequest *)request
    16. {
    17. BOOL loginSuccessful = NO;
    18. for (NSHTTPCookie *cookie in request.responseCookies) {
    19. if ([cookie.name hasSuffix:@"_u"] && ![cookie.value isEqualToString:@"1"]) {
    20. loginSuccessful = YES;
    21. }
    22. }
    23. if (loginSuccessful) {
    24. NSLog(@"login ok");
    25. } else {
    26. NSLog(@"login failed");
    27. }
    28. }
    29. - (void)requestFailed:(ASIHTTPRequest *)request
    30. {
    31. int statusCode = [request responseStatusCode];
    32. NSError *error = [request error];
    33. NSString *responseString = [error localizedDescription];
    34. // do some error handling
    35. }
    Alles anzeigen

    In den Response-Cookies stehen dann die Sitzungsdaten drin und es genügt, diese Cookies bei weiteren Requests dann als requestCookies zu setzen.

    Viele Grüße,
    Thomas
  • habe nun mal ein wenig rumgebastelt und mir das ganze mit der Verbindung in eine eigene Klasse gepackt, der Aufruf von "doLogin" funktioniert aus der anderen klasse heraus, nur mein Problem ist jetzt, damit weiß ich ja noch nicht ob die Anfrage die ich geschickt habe erfolgreich war oder nicht, das wird ja über die Methode

    Quellcode

    1. - (void)requestFinished:(ASIHTTPRequest *)request


    über loginSuccessfull zurückgegeben, also müsste ich theoretisch eine weitere Methode schreiben, die dann die Cookies auswertet und dann ein BOOL Wert mit YES oder NO zurückgibt, den ich dann in der Klasse auswerte die die Methode "doLogin" aufruft, ist das richtig?
    [window close]
  • uniique schrieb:

    habe nun mal ein wenig rumgebastelt und mir das ganze mit der Verbindung in eine eigene Klasse gepackt, der Aufruf von "doLogin" funktioniert aus der anderen klasse heraus, nur mein Problem ist jetzt, damit weiß ich ja noch nicht ob die Anfrage die ich geschickt habe erfolgreich war oder nicht, das wird ja über die Methode

    Quellcode

    1. - (void)requestFinished:(ASIHTTPRequest *)request


    über loginSuccessfull zurückgegeben, also müsste ich theoretisch eine weitere Methode schreiben, die dann die Cookies auswertet und dann ein BOOL Wert mit YES oder NO zurückgibt, den ich dann in der Klasse auswerte die die Methode "doLogin" aufruft, ist das richtig?

    Joo, ich denke schon - ein fehlgeschlagener Login liefert die UserID 1 und ansonsten die "echte" UserID (deswegen die Prüfung auf != "1" bei den Cookies).
  • irgendwie ist da der Wurm drin ;) also ich rufe die Methode mit

    Quellcode

    1. Connection *newCon = [[Connection alloc] init];
    2. [newCon getUser:tUsername.text:tPassword.text];
    3. if([newCon loginSuccess]==YES)
    4. {
    5. [self dismissModalViewControllerAnimated:YES];
    6. }
    7. - (void)getUser:(NSString *)userName:(NSString *)userPassword {
    8. [self setRequest:[ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://localhost/~uniique/phpBB/ucp.php?mode=login"]]];
    9. [request setPostValue:userName forKey:@"username"];
    10. [request setPostValue:userPassword forKey:@"password"];
    11. [request setPostValue:@"dummy" forKey:@"login"];
    12. [request setUseCookiePersistence:NO];
    13. [request setDelegate:self];
    14. [request setDidFinishSelector:@selector(requestFinished:)];
    15. [request setDidFailSelector:@selector(requestFailed:)];
    16. [request setTimeOutSeconds:2];
    17. [request setRequestMethod:@"POST"];
    18. [request startAsynchronous];
    19. }
    Alles anzeigen



    auf, nur ist es so dass die Methode

    Quellcode

    1. - (void)requestFinished:(ASIFormDataRequest *)myRequest{
    2. BOOL loginSuccessful = NO;
    3. for (NSHTTPCookie *cookie in request.responseCookies) {
    4. NSLog(@"\nName: %@\nValue: %@\nExpires: %@", [cookie name], [cookie value], [cookie expiresDate]);
    5. NSLog(@"%@",[request responseCookies]);
    6. if ([cookie.name hasSuffix:@"_u"] && ![cookie.value isEqualToString:@"1"]) {
    7. loginSuccessful = YES;
    8. //loginCookie = cookie;
    9. }
    10. }
    11. if (loginSuccessful) {
    12. NSLog(@"login ok");
    13. loginSuccess = YES;
    14. } else {
    15. loginSuccess = NO;
    16. UIAlertView *myAlert = [[UIAlertView alloc]
    17. initWithTitle:@"Login fehlgeschlagen!"
    18. message:@"Benutzername oder Passwort falsch."
    19. delegate:nil
    20. cancelButtonTitle:@"Okay"
    21. otherButtonTitles:nil];
    22. [myAlert show];
    23. [myAlert release];
    24. NSLog(@"login failed");
    25. }
    26. }
    Alles anzeigen


    erst nach dem

    Quellcode

    1. if([newCon loginSuccess]==YES)
    aufgerufen wird, somit bekomme ich für meinen loginSuccess immer ein NO zurück :(

    EDIT: ok Problem gelöst, es lag an der Requestmethode, musste anstatt startAsynchronus, startSynchronus anwenden ^^
    [window close]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von uniique ()