2015-12-14 28 views
5

Tôi cần một số trợ giúp và lời khuyên về chủ đề sau.Laravel 5: Xác thực http php http

Boos của tôi có thiết lập máy chủ Apache đơn giản và có thiết lập a simple php auth. Ngay khi người dùng được xác thực bằng bảng điều khiển như thế này.

enter image description here

Ông/bà có hơn quyền truy cập vào tất cả các ứng dụng đang chạy đằng sau nó. Vì vậy, nói cách khác bảng điều khiển này phục vụ như là một 'cổng', nếu bạn đang trên cổng thì bạn có quyền truy cập (tất nhiên có bảng cho phép chạy trên máy chủ web).

Vấn đề

App Tôi đang xây dựng sử dụng Laravel 5 cần chạy đằng sau cánh cổng, vì vậy nó có nghĩa là ứng dụng cần phải biết ai là người sử dụng là.

Sử dụng $_SERVER['PHP_AUTH_USER']; tôi có thể lấy username mà hiện đang đăng nhập.

Nhưng nếu tôi muốn theo dõi user's hành động trên ứng dụng của tôi? Tôi cần một cái gì đó như $this->user_id phải không? Vì vậy, tôi đã suy nghĩ ngay sau khi người dùng vượt qua 'cổng' tôi lấy username của mình và tạo một người dùng ra khỏi nó lưu nó trong cơ sở dữ liệu của tôi chạy phía sau Laravel bằng cách làm như vậy.

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, 

     ]); 
    } 

Nhưng điều này làm cho người dùng mỗi khi người dùng làm mới trang! Nhưng nếu không đi xa hơn thì cách tốt nhất để làm điều này là gì?

  1. Tôi có cần nhà cung cấp riêng (Tôi đã thử nghiệm mã ở trên AppServiceProvider) không?

  2. Làm cách nào tôi có thể làm điều gì đó như thế này $this->user_id sau khi lưu username?

Note: Tôi biết Laravel có auth cơ bản ra khỏi hộp, nhưng điều này sẽ không làm việc vì người sử dụng là chưa có trong cơ sở dữ liệu của tôi. Tôi cần phải tạo chúng đầu tiên giống như trên.

+0

Có bao nhiêu người dùng sẽ có quyền truy cập trang? Nó có công khai cho bất kỳ đối tượng nào không hoặc nó là một trang nội bộ sẽ được sử dụng bởi N người dùng cố định? – lesssugar

+0

@lesssugar người dùng bên trong công ty có tất cả quyền truy cập (tất nhiên sau khi bạn đã đăng nhập). Nó không thể truy cập công khai từ internet (nếu đó là ý của bạn) – user3641381

Trả lời

1

Trước tiên, bạn nên kiểm tra xem người dùng có tên người dùng được cung cấp đã tồn tại trong cơ sở dữ liệu của bạn chưa.Bằng cách này, bạn không tạo người dùng mới trên mỗi lần làm mới. Sau đó, bạn có thể sử dụng Auth::login($user); để đăng nhập người dùng cho phép bạn sử dụng phần mềm trung gian auth do Laravel cung cấp (không phải auth.basic!). Bằng cách này, bạn có thể truy cập người dùng trên toàn bộ ứng dụng của mình với mặt tiền Auth và lưu trữ thông tin bổ sung về người dùng:

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

Bạn có khuyên bạn nên có mã ở trên trong một nhà cung cấp khác (để chỉ được kích hoạt một lần) hoặc chỉ giữ nó trong 'AppServiceProvider'? Bởi vì mỗi lần tôi chạy một dòng lệnh nào đó, tôi nhận được ErrorException 'biến không xác định: agent' – user3641381

+0

Bạn nên đặt mã đăng nhập trong câu lệnh if thứ hai của bạn. Tôi đã cập nhật câu trả lời của mình cho phù hợp. Artisan không nên thất bại nữa. Bạn có thể đặt nó bên trong AppServiceProvider. Tôi muốn chuyển mã trên vào một nhà cung cấp dịch vụ chuyên dụng vì ứng dụng sẽ lớn hơn. Cuối cùng, tôi khuyên bạn nên triển khai nhà cung cấp Auth tùy chỉnh của riêng mình: http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers – tommy

+0

Tôi đã thử nghiệm điều này. Nó chỉ tạo ra một người dùng! vì vậy, ví dụ nếu tôi đăng nhập, nó sẽ tạo người dùng cho tôi (với tên người dùng đăng nhập) nhưng nếu ai đó trong công ty cũng cố gắng truy cập url (nghĩa là đăng nhập) hơn là không tạo ra 'người dùng' . Bất kỳ ý tưởng? – user3641381

1

Tôi biết đó không phải là những gì bạn muốn nghe, nhưng tôi thực sự sẽ sử dụng xác thực của Laravel. Apache auth cơ bản nên ngăn chặn người dùng trái phép truy cập vào trang của bạn, và có thể ngăn chặn các trang được thu thập thông tin bởi các chương trình - không phục vụ như là một hình thức đăng nhập vào ứng dụng của bạn.

Tạo một bộ thông tin xác thực cho Apache auth, vì vậy tất cả những người có nó đều có thể truy cập trang. Nhưng sau đó, tạo biểu mẫu đăng nhập chuẩn với tên người dùng và mật khẩu, điều này sẽ cụ thể cho từng người dùng. Bằng cách này, ngay cả khi ai đó quản lý để có được thông qua Apache, họ vẫn sẽ không được đăng nhập.

An ninh khôn ngoan, đây sẽ là con đường để đi. Ngoài ra, hãy làm theo cách này để bạn mở ra các khả năng mới: bạn có thể lưu trữ thêm thông tin về người dùng của mình, như ngôn ngữ ưa thích hoặc phạm vi quyền của họ.

Hãy nghĩ về điều đó :)

+0

Cảm ơn bạn đã dành thời gian và trả lời câu hỏi của tôi. Có, tôi đã xem xét lựa chọn sugessetd của bạn trước khi đăng câu hỏi. Nhưng tôi cần một giải pháp để đi và sau đó tôi sẽ mở rộng nó vào nhà cung cấp riêng của tôi. – user3641381

Các vấn đề liên quan