asp.net, php

Integrare phpBB3 in un sito asp.net

Esistono una miriade di forum Open Source gratuitamente disponibili e utilizzabili sia in applicazioni private che in applicazioni commerciali. Alcuni di questi sono sviluppati in asp.net per cui, per uno sviluppatore .NET come me, dovrebbero essere facilmente modificabili e adattati alle specifiche esigenze di ogni sito. Allora perche pensare ad un forum sviluppato in php e cercare di farlo convivere con una tecnologia completamente diversa?

Prima di tutto perchè phpbb3 mi piace. Mi piace molto, e molto piu di ogni altro forum open source abbia incontrato fino ad’ora. Secondo… le cose complicate mi stimolano. Come vedremo tuttavia, integrare phpBB3 e un sito asp.net è tutt’altro che complicato – almeno in riferimento al livello di integrazione di cui parliamo qui – e ha richiesto semplicemente qualche ora di navigazione tra Google e forums per capire come funziona la procedura di autenticazione di phpBB3.

In caso qualcuno si stia domandando la necessità o validità di una integrazione del genere faccio presente che nello scenario in cui mi trovo a lavorare dispongo di due server, uno linux e uno windows su cui girano una serie di applicazioni che fanno capo alla stessa community. Questo mi ha dato la possibilità di poter sfruttare le mie conoscenze in asp.net e la validità e numerosità delle soluzioni prodotte dalla comunità php.

Anando al nocciolo del problema, quello di cui avevo bisogno era di poter usare phpBB3 come sistema di gestione delle utenze in modo di poter sfruttare le funzionalità di login, messaggistica interna e tutti i dettagli del profilo che la piattaforma offre. Una volta avvenuta l’autenticazione attraverso la procedura di login di phpBB3 viene generato un cookie contenente un valore di nome sid. Questo valore individua il sessionID con cui il forum ha identificato l’utente e viene memorizzato in una tabella del database del forum relazionata con la tabella utenti.

Conoscendo il valore di sid quindi è facilissimo risalire a tutte le informazioni che vogliamo:

Dim phpbbCookie As HttpCookie
phpbbCookie = Request.Cookies("phpbb3_t6z7h_u")

If Not IsNothing(phpbbCookie) Then
	Dim sId As String
	Dim sqlstring As String

	sId = phpbbCookie.Values(0)

sqlstring = "SELECT username, user_email, user_avatar, user_id " & _
	"FROM `phpbb_users` " & _
	"INNER JOIN `phpbb_sessions` ON session_user_id = user_id " & _
	"WHERE session_id = '" & sId & "'"

.........

Nel mio caso il nome del Cookie da ricercare è phpbb3_t6z7h_u, il Cookie potrebbe avere un nome diverso in altre installazioni. Per quanto semplice questa soluzione, purtroppo non è applicabile nel mio caso perchè, essendo i siti su due subdomain diversi, i cookie prodotti sull’uno non sono accessibili sull’altro. Per questo motivo ho dovuto cercare una soluzione alternativa che si è rivelata comunque altrettanto semplice.

E’ sufficiente modificare minimamente la procedura di autenticazione in maniera tale che, in fase di login, in caso di avvenuta autenticazione, prima di tornare al forum, la procedura indirizzi il browser ad una pagina aspx e passi come parametro il valore sid generato. Può sembrare complicato ma è più facile a farsi che a dirsi. E’ sufficiente aprire il file functions.php nella cartella includes di phpbb3 e individuare questa parte di codice:

if ($result['status'] == LOGIN_SUCCESS)
{
	$redirect = request_var('redirect', "{$phpbb_root_path}index.$phpEx");

E modificare la riga $redirect inserendo qualcosa tipo:

	redirect(append_sid("http://win.domain.it/procedura.aspx"));

In modo di effettuare il redirect su una pagina aspx che provvederà a salvare il sid in un nuovo cookie stavolta accessibile in asp.net:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	Dim sid As String
	sid = Request.QueryString("sid")

	If sid.Length > 0 Then
		Dim phpcookie As HttpCookie
		phpcookie = New HttpCookie("phpbb_userInfo")
		phpcookie.Value = sid

		Response.Cookies.Add(phpcookie)
	End If

	Response.Redirect("http://lnx.domain.it/forum")
End Sub

3 pensieri su “Integrare phpBB3 in un sito asp.net

  1. Ciao,
    anche io sono solito accoppiare phpbb3 (forum che uso dalla beta 2 :P) ad un sito realizzato in asp.net (2.0+). (puoi vedere come esempi: http://www.lacrimenere.org e http://www.clansdn.org)

    Ho trovato queto tuo post perchè avevo pensato di realizzare una library cuscinetto per accedere in maniera consistente al db del forum e non volevo reinventare la ruota.

    In particolare mi interessavano queste problematiche:
    1) scrittura di post con bbcode (ho problemi a generare il bbcode_bitfield)
    2) come trattare i permessi dell’utente con i vari forum/sezioni

    Ciao
    kralizek chiocciola clansdn punto org

  2. Ciao Kralizek,
    come hai visto l’integrazione che cerco io è piuttosto blanda, si riferisce soltanto al passaggio di informazioni relative all’identità dell’utente in modo di poterlo identificare su pagine all’esterno del forum.

    Al momento non ho avuto esigenze di studiare la struttura delle tabelle per creare dei form di inserimento post ad hoc.

    Ultimamente invece sto cercando di espandere ulteriormente il concetto e portarmi appresso le informazioni di autenticazione di phpbb3 per integrarle con il sistema di commenti di WordPress.

Lascia un commento