2015-12-14 13 views
5

Ho bisogno di aiuto e consigli sul seguente argomento.Laravel 5: autenticazione HTTP Apache php

My Boos ha una semplice configurazione del server Apache e ha anche l'installazione a simple php auth. Non appena l'utente viene convalidato utilizzando un pannello come questo.

enter image description here

Lui/lei hanno di accesso a tutte le applicazioni in esecuzione dietro di esso. Quindi, in altre parole, questo pannello funge da "porta", se ci si trova oltre il cancello allora si ha accesso (ovviamente c'è una tabella delle autorizzazioni in esecuzione sul server web).

Problema

L'App Sto costruendo con laravel 5 ha bisogno di correre dietro il cancello, quindi significa l'applicazione ha bisogno di sapere chi è l'utente.

Utilizzando $_SERVER['PHP_AUTH_USER']; posso prendere il username cui attualmente connesso.

Ma cosa succede se voglio tenere traccia delle azioni user's sulla mia app? Mi serve qualcosa come $this->user_id giusto?

Quindi stavo pensando non appena l'utente passa il "gate", prendo il suo username e ne faccio uscire un utente salvandolo nel mio database in esecuzione dietro a Laravel.

if(isset($_SERVER)) 
    { 
    if (array_key_exists('PHP_AUTH_USER', $_SERVER)) { 
     $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') 

    } 

    $user = User::create([ 
     'username' => $agent, 

     ]); 
    } 

Ma questo rende l'utente ogni volta che l'utente aggiorna la pagina! Ma senza andare oltre qual'è il modo migliore per farlo?

  1. Ho bisogno di un fornitore separato (ho provato il codice di cui sopra in AppServiceProvider)?

  2. Come posso fare qualcosa come questo $this->user_id dopo aver salvato il username?

Nota: So laravel ha autenticazione base di fuori della scatola, ma questo non funzionerà perché l'utente non sono ancora nel mio database. Devo crearli prima come sopra.

+0

Quanti utenti avranno accesso alla pagina? È pubblicamente disponibile per qualsiasi pubblico o è una pagina interna che verrà utilizzata da N utenti fissi? – lesssugar

+0

Gli utenti @lesssugar all'interno dell'azienda hanno tutti accesso (ovviamente dopo aver superato il login). Non è pubblicamente accessibile da internet (se è questo che intendi) – user3641381

risposta

1

In primo luogo, si dovrebbe verificare se un utente con il nome utente fornito esiste già nel database.In questo modo non crei un nuovo utente ad ogni aggiornamento. È quindi possibile utilizzare Auth::login($user); per accedere all'utente che consente di utilizzare il middleware auth fornito da Laravel (non auth.basic!). In questo modo puoi accedere all'utente su tutta la tua App con la facciata Auth e memorizzare ulteriori informazioni sull'utente:

if(isset($_SERVER)) 
{ 
    if (array_key_exists('PHP_AUTH_USER', $_SERVER)) { 
     $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') 

     // Try to find an existing user, or create a new one if the user does not exist 
     $user = User::firstOrCreate([ 
      'username' => $agent, 
     ]); 

     // Authenticate the user 
     \Auth::loginUsingId($user->id); 
    } 
} 
+0

Consiglieresti di avere il codice sopra riportato in un altro provider (per essere attivato solo una volta) o semplicemente di tenerlo in "AppServiceProvider'? Perché ogni volta che eseguo una determinata riga di comando ottengo ErrorException 'variabile non definita: agent' – user3641381

+0

È necessario inserire il codice di accesso nella seconda istruzione if. Ho aggiornato la mia risposta di conseguenza. L'artigiano non dovrebbe fallire più. Puoi posizionarlo all'interno di AppServiceProvider. Sposterei il codice di cui sopra in un fornitore di servizi dedicato mentre l'applicazione si ingrandiva. In definitiva, ti consiglio di implementare il tuo provider di autenticazione personalizzato: http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers – tommy

+0

Ho provato questo. Crea solo un utente! ad esempio, se effettuo il login, viene creato un utente da me (con nome utente di accesso), ma se qualcun altro in azienda ha tentato di raggiungere anche l'url (ovvero l'accesso), non crea un utente fuori da lui . Qualche idea? – user3641381

1

So che non è quello che vuoi sentire, ma vorrei davvero utilizzare l'autenticazione di Laravel. L'autenticazione di base di Apache dovrebbe impedire agli utenti non autorizzati di accedere alla tua pagina, e forse impedire che la pagina venga sottoposta a scansione da parte dei bot, non come modulo di accesso alla tua app.

Creare un set di credenziali per l'autenticazione di Apache, in modo che tutte le persone che lo hanno possano accedere alla pagina. Ma poi, crea un modulo di accesso standard con nome utente e password, che sarà specifico per ciascun utente. In questo modo, anche qualcuno riesce a passare attraverso Apache, non sarà ancora loggato.

Per quanto riguarda la sicurezza, questa sarebbe la strada da percorrere. Inoltre, facendo in questo modo apri nuove possibilità: puoi memorizzare più informazioni sui tuoi utenti, come la loro lingua preferita o il loro ambito di permessi.

Pensateci :)

+0

Grazie per aver dedicato del tempo e aver risposto alla mia domanda. Sì, ho considerato la tua opzione sugessetd prima di pubblicare la domanda. Ma ho bisogno di una soluzione a portata di mano e più tardi lo espanderò al mio fornitore separato. – user3641381