2015-05-08 14 views
6

मैं लैरवेल 5 में नया हूं और एक सरल प्रमाणीकरण पृष्ठ बनाने की कोशिश कर रहा हूं। मेरी समस्या यह है कि मैं लॉगआउट लिंक पर क्लिक करने के बाद ठीक से लॉगआउट कर सकता हूं लेकिन यदि मैं ब्राउज़र के बैक बटन पर क्लिक करता हूं, तो अभी भी उस पृष्ठ की सामग्री को देखने में सक्षम है जो वास्तव में मेरे एथ मिडलवेयर प्रक्रिया के संबंध में नहीं देखा जाना चाहिए। मैंने पढ़ा है कि मैं कैशिंग को अक्षम करके इसे रोक सकता हूं लेकिन ऐसा नहीं लगता कि यह ऐसा करने का सबसे अच्छा तरीका है, तो मैं इसे बेहतर तरीके से कैसे बना सकता हूं? सीधे शब्दों में मेरी लॉगआउट मार्गलैरवेल में लॉगआउट के बाद ब्राउजर के बैक बटन लॉग इन को रोकें 5

Route::get('logout', array('uses' => '[email protected]')); 

लॉगआउट समारोह है:

public function logout() { 
     Auth::logout(); // logout user 
     Session::flush(); 
     Redirect::back(); 
     return Redirect::to('pages/login'); //redirect back to login 
} 
+0

आप लॉगआउट के लिए अपने कोड और न केवल मार्ग – xenish

+0

दिखा सकते हैं आप कैश :: फ्लश() – xenish

+0

की कोशिश की संपादित सवाल जाँच @xenish कृपया, मेरे पास है इसे – Tartar

उत्तर

17

उपयोगकर्ता वापस जाएं बटन क्लिक करता है वे नहीं वास्तव में, अपने बस ब्राउज़र प्रतिपादन क्या यह कैश्ड है में लॉग इन कर रहे हैं पिछले पृष्ठ दृश्यों से। उपयोगकर्ता किसी भी चीज़ के साथ नेविगेट या बातचीत करने में सक्षम होगा जिसके लिए उन्हें लॉग इन करने की आवश्यकता है क्योंकि सर्वर पर आपके एप्लिकेशन के लिए, वे प्रमाणीकृत नहीं हैं।

उपयोगकर्ता आपको लगता है कि पर कोई नियंत्रण नहीं के रूप में यह सर्वर के लिए एक अनुरोध नहीं है है वापस बटन क्लिक करता है।

बैक बटन का उपयोग करके, एकमात्र सामग्री जो वे देख पाएंगे वह यह है कि वे लॉग इन करते समय पहले से ही देख चुके हैं। अगर वे कुछ भी नया एक्सेस करने का प्रयास करते हैं, तो वे आपके आवेदन के लिए एक नया अनुरोध करेंगे, आपका मिडलवेयर ट्रिगर करेगा और उन्हें लॉगिन पेज पर रीडायरेक्ट करेगा।

मुझे लगता है कि अगर आप वास्तव में इस व्यवहार को रोकना चाहते हैं तो आप कुछ जावास्क्रिप्ट का उपयोग कर सकते हैं और इस तरह एजेक्स अनुरोध भेज सकते हैं और जांच सकते हैं कि उपयोगकर्ता इस तरह से लॉग इन है या नहीं, लेकिन सुरक्षा बिंदु से काफी बेकार है।

+1

सर्वश्रेष्ठ स्पष्टीकरण। :) –

+3

हालांकि यह उत्तर यह समझाने में अच्छा है कि इसमें क्या हो रहा है, वास्तव में समस्या को हल नहीं करता है। मान लें कि उपयोगकर्ता संवेदनशील डेटा देख रहा है, लॉग आउट करता है, और दूर चला जाता है। कोई और कंप्यूटर पर बैठता है और बैक बटन हिट करता है। वे संवेदनशील डेटा देख पाएंगे। यह एक बड़ी सुरक्षा समस्या की तरह लगता है। मुझे लगता है कि एक पुनर्मूल्यांकन को मजबूर करने के बारे में नीचे दिए गए उत्तरों में से एक अधिक उचित है। –

1

मैंने जिस विधि का उपयोग किया है वह लॉगआउट के बाद पिछले पृष्ठ पर रीडायरेक्ट करना है। जब तक कि पिछला पृष्ठ सुरक्षित नहीं था, तब तक ऑथ मिडलवेयर आपको वापस लाएगा और आपको लॉगिन पृष्ठ पर रीडायरेक्ट करेगा। अब जब आप बैक बटन पर क्लिक करते हैं तो पिछला पृष्ठ अब कैश नहीं होता है और आपको फिर से लॉगिन पेज मिलता है।

मूल चर्चा: https://laracasts.com/discuss/channels/requests/back-button-browser

public function logout() { 
     Auth::logout(); // logout user 
     return redirect(\URL::previous()); 
} 
+1

यह उपयोगकर्ता काम नहीं करता है अगर उपयोगकर्ता – user3494047

0

प्रमाणन के साथ एक सुरक्षित मार्ग पर पुन: निर्देशित प्रयास करें मिडलवेयर:

return redirect('home'); 

तो यह प्रवेश पृष्ठ & वापस बटन दिखाई नहीं देंगे पर पुन: निर्देशित बाध्य करेगा पिछला पृष्ठ

17

यह समाधान काम करता है! कारीगर का उपयोग कर एक मिडलवेयर बनाएं।

php artisan make:middleware RevalidateBackHistory 

RevalidateBackHistory मिडलवेयर के भीतर, हम कोई कैश करने के लिए शीर्ष लेख की स्थापना की और दोबारा सत्यापित।

<?php 
namespace App\Http\Middleware; 
use Closure; 
class RevalidateBackHistory 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
$response = $next($request); 
return $response->header('Cache-Control','nocache, no-store, max-age=0, must-revalidate') 
->header('Pragma','no-cache') 
->header('Expires','Fri, 01 Jan 1990 00:00:00 GMT'); 
} 
} 

अद्यतन आवेदन के Kernel.php

protected $routeMiddleware = [ 
. 
. 
'revalidate' => \App\Http\Middleware\RevalidateBackHistory::class, 
. 
. 
]; 

और में मार्ग मिडलवेयर बस!तो मूल रूप से आपको केवल उन मार्गों के लिए पुनर्मूल्यांकन मिडलवेयर कॉल करने की आवश्यकता है, जिनके लिए उपयोगकर्ता प्रमाणीकरण की आवश्यकता होती है।

+0

से अधिक बार मेरे लिए काम करता है !! धन्यवाद –

4

चरण 1: निम्न आदेश का उपयोग कर एक मध्यस्थ बनाने के लिए:

php artisan make:middleware PreventBackHistory 

चरण 2:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class PreventBackHistory 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $response = $next($request); 
     return $response->header('Cache-Control','no-cache, no-store, max-age=0, must-revalidate') 
      ->header('Pragma','no-cache') 
      ->header('Expires','Sun, 02 Jan 1990 00:00:00 GMT'); 
    } 
} 

चरण 3:

निम्नलिखित सामग्री के साथ PreventBackHistory.php की सामग्री को बदलने के रजिस्टर मिडलवेयर kernal.php में

'preventBackHistory' => \App\Http\Middleware\PreventBackHistory::class, 
,210

और अच्छी जाना आप कैश को साफ़ करना चाहते हैं :)

+0

चरण 4: अपने नियंत्रक के कंस्ट्रस्टर सार्वजनिक फ़ंक्शन __construct() { $ यह-> मिडलवेयर ('रोकथाम इतिहास') में मिडलवेयर का उपयोग करें; \t \t $ यह-> मिडलवेयर ('auth'); } – Payal

संबंधित मुद्दे