2013-06-14 7 views
8

मैं लैरवेल की ऑथ क्लास की कोशिश कर रहा हूं लेकिन हर बार जब मैं किसी उपयोगकर्ता में लॉग इन करने का प्रयास करता हूं, तो विधि गलत होती है। यहाँ मेरी कोड है:लार्वेल 4 एथ :: प्रयास() हमेशा झूठा

routes.php

Route::get('new-user', function() { 
    return View::make('register'); 
}); 

Route::post('new-user', function() { 
    $name = Input::get('name'); 
    $email = Input::get('email'); 
    $password = Hash::make(Input::get('password')); 

    $user = new User; 
    $user->name = $name; 
    $user->email = $email; 
    $user->password = $password; 

    $user->save(); 
});  

Route::get('login', function() { 
     return View::make('login'); 
    }); 

    Route::post('login', function() { 

     $user = array(
      'email' => Input::get('email'), 
      'password' => Hash::make(Input::get('password')) 
     ); 

     if (Auth::attempt($user)) { 
      //return Redirect::intended('dashboard'); 
      return "ok."; 
     } else { 
      return "Wrong."; 
     } 

    }); 

विचारों/login.blade.php

{{ Form::open(array('url' => 'login', 'method' => 'post')) }} 

    <h1>Login:</h1> 

    <p> 
     {{ Form::label('email', 'Email: ') }} 
     {{ Form::text('email') }}<br /> 

     {{ Form::label('password', 'Password: ') }} 
     {{ Form::password('password') }}<br /> 
    </p> 

    <p> 
     {{ Form::submit('Login') }} 
    </p> 

{{ Form::close() }} 

config/auth.php

return array(

    'driver' => 'eloquent', 
    'model' => 'User', 
    'table' => 'users', 
    'reminder' => array(
     'email' => 'emails.auth.reminder', 'table' => 'password_reminders', 
    ), 

); 

डेटाबेस ईमेल है & पासवर्ड फ़ील्ड, और पासवर्ड फ़ील्ड वर्कर (60) है। जब भी मैं लॉगिन जानकारी/लॉगिन में भेजता हूं तो यह मुझे "गलत" देता है। मैं वास्तव में यहां क्या गलत नहीं देख सकता?

उत्तर

3

प्रयास करने से पहले पासवर्ड हैश नहीं है:

$user = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    if (Auth::attempt($user)) { 
     //return Redirect::intended('dashboard'); 
     return "ok."; 
    } else { 
     return "Wrong."; 
    } 
+0

यह अभी भी मुझे झूठा ("गलत") – John

+1

दस्तावेज के अनुसार (http://four.laravel.com/docs/security#storing-passwords) पासवर्ड को प्रयास() करने के लिए unhashed पारित कर दिया गया है। मुझे यकीन है कि यह एक समस्या थी, लेकिन आपके पास एक से अधिक हो सकते हैं। सुनिश्चित करें कि पासवर्ड आपकी उपयोगकर्ता तालिका में सही ढंग से संग्रहीत है। –

+0

यहां मैं डेटाबेस में उपयोगकर्ताओं को कैसे संग्रहीत करता हूं: 'रूट :: पोस्ट ('नया उपयोगकर्ता', फ़ंक्शन() { $ name = इनपुट :: प्राप्त करें ('नाम'); $ ईमेल = इनपुट :: प्राप्त करें ('ईमेल'); $ पासवर्ड = हैश :: बनाना (इनपुट :: प्राप्त करें ('पासवर्ड')); $ उपयोगकर्ता = नया उपयोगकर्ता; $ उपयोगकर्ता-> नाम = $ नाम; $ उपयोगकर्ता-> ईमेल = $ ईमेल; $ उपयोगकर्ता-> पासवर्ड = $ पासवर्ड; $ उपयोगकर्ता-> सहेजें(); }); ' क्षमा करें, मुझे नहीं पता कि कोड को ठीक तरह से कैसे दिखाना है। – John

6

आपका कोड बाहर गुस्सा दिलाना है क्योंकि आप Auth::attempt() को गलत चर गुजर रहे हैं। उस विधि के लिए कुंजीपटल उपयोगकर्ता नाम, पासवर्ड और वैकल्पिक रूप से याद रखने के साथ एक सरणी की आवश्यकता होती है। उस प्रकाश में, आपका उपरोक्त कोड होना चाहिए:

Route::post('login', function() 
{ 
    $credentials = [ 
     'username' => Input::get('email'), 
     'password' => Input::get('password') 
    ]; 

    dd(Auth::attempt($credentials)); 
}); 

आशा है कि मदद करता है।

इसके अलावा मैं आपको अपने काम के प्रवाह को बेहतर बनाने के लिए अतिरिक्त कोड के स्निपेट दूंगा। विधि

public function setPasswordAttribute() 
{ 
    $this->password = Hash::make($this->password); 
} 

इस तरह पासवर्ड होगा स्वचालित रूप से हर बार यह सेट है

0

आप UserInterface वर्ग प्रदान की को लागू करना चाहिए टुकड़ों में बांटा

Route::post('register', function() 
{ 
    $input = Input::only(['username', 'email', 'password']); 

    // validate data 

    Eloquent::unguard(); 

    $user = User::create($input); 

    Auth::loginUsingId($user->id); 

    return Redirect::to('dashboard'); 
}); 

फिर अपने उपयोगकर्ता मॉडल में जोड़ें: रूट नया उपयोगकर्ता स्टोर करने के लिए आपके मॉडल वर्ग के भीतर लार्वेल द्वारा:

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface 
{ 

और याद रखें कि इसमें 2 अमूर्त विधियां हैं जिन्हें आपको अपने मॉडल पर घोषित करना चाहिए। आप मूल User.php मॉडल

0

का पालन कर सकते हैं अपना पासवर्ड लंबाई देखें। यह डेटाबेस में 60 या उच्चतम होना चाहिए।

0

यह काम नहीं करेगा क्योंकि auth :: प्रयास bcrypt का उपयोग करके हैश को पासवर्ड बदलता है, और उपयोगकर्ता तालिका में उस हैश को मिलान करने के लिए देखता है।

संक्षेप में पासवर्ड auth के लिए डेटाबेस तालिका में संग्रहीत हैश होना चाहिए :: काम करने का प्रयास।

यही कारण है कि आपकी if() स्थिति विफल हो रही है।

आप डेटाबेस में हैश के रूप में पासवर्ड की दुकान और फिर उपयोग करने के लिए प्रमाणन :: प्रयास

नीचे

laravel डॉक्स

https://laravel.com/docs/5.2/authentication#authenticating-users

प्रयास विधि एक को स्वीकार करता है से है bcrypt (पासवर्ड) का उपयोग कर सकते कुंजी/मूल्य जोड़े की सरणी इसके पहले तर्क के रूप में। सरणी में मान आपकी डेटाबेस तालिका में उपयोगकर्ता को खोजने के लिए उपयोग किए जाएंगे। तो, ऊपर दिए गए उदाहरण में, उपयोगकर्ता ईमेल कॉलम के मूल्य से पुनर्प्राप्त होगा। यदि उपयोगकर्ता पाया जाता है, तो डेटाबेस में संग्रहीत हैश किए गए पासवर्ड की तुलना शेड पासवर्ड मान सरणी के माध्यम से विधि में पारित की जाएगी। यदि उपयोगकर्ता उपयोगकर्ता द्वारा के लिए प्रमाणीकृत सत्र से मिलान किए गए दो हैंश किए गए पासवर्ड प्रारंभ किए जाएंगे।

प्रमाणीकरण सफल होने पर प्रयास विधि सही हो जाएगी। अन्यथा, झूठी वापस आ जाएगी।

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