2013-09-26 5 views
8

मेरे पास एक फेसबुक लॉगिन है I Outh2 के साथ प्रदर्शन कर रहा हूं, और फिर मैं लैरवेल 4 का निर्माण कर रहा हूं पुनरीक्षण पर उपयोगकर्ता को लॉग इन करने के लिए प्रमाणीकरण प्रणाली। उपयोगकर्ताओं के बहुमत के लिए, मैं मैं क्या है के साथ कोई समस्या दिखाई देती है, लेकिन एक उपयोगकर्ता के लिए, वह प्रवेश पर निम्न त्रुटि दिखाई देख रही है:तर्क 1 को रोशनी Auth Guard :: लॉगिन() को इंटरफ़ेस को कार्यान्वित करना चाहिए रोशनी Auth UserInterface, खुली खुली:

ErrorException 
Argument 1 passed to Illuminate\Auth\Guard::login() must implement interface Illuminate\Auth\UserInterface, null given 
open: */nfs/c09/h04/mnt/139243/domains/crowdsets.com/vendor/laravel/framework/src/Illuminate/Auth/Guard.php 
*  /** 
     * Log a user into the application. 
     * 
     * @param \Illuminate\Auth\UserInterface $user 
     * @param bool $remember 
     * @return void 
     */ 
     public function login(UserInterface $user, $remember = false) 
     { 
       $id = $user->getAuthIdentifier(); 

यहाँ नियंत्रक में प्रासंगिक लॉगिन/प्रमाणीकरण कोड है:

<?php 

use Illuminate\Auth\UserInterface; 

class Fan extends Eloquent implements UserInterface { 
    protected $guarded = array(); 

    public static $rules = array(); 

    public function getAuthIdentifier() 
{ 
return $this->getKey(); 
} 


public function getAuthPassword() 
{ 
return $this->password; 
} 

यह बहुत जटिल है क्योंकि इस लॉगिन के सभी के लिए काम करता है:

$check = Fan::where('fbid', '=', $user['uid'])->first(); 

       if(is_null($check)) { 

        $fan = new Fan; 

        $fan->fbid = $user['uid']; 
        $fan->email = $user['email']; 
        $fan->first_name = $user['first_name']; 
        $fan->last_name = $user['last_name']; 
        $fan->gender = $user['gender']; 
        $fan->birthday = $user['birthday']; 
        $fan->age = $age; 
        $fan->city = $city; 
        $fan->state = $state_abbrev; 
        $fan->image = $user['image']; 
        $fan->friend_ids_url = $user['friends']; 
        $fan->friend_ids_unpacked = $friend_ids; 

        $fan->save(); 

        $new = Fan::where('fbid', '=', $user['uid'])->first(); 

        Auth::login($new); 
        return Redirect::to('fans/home'); 

       } 

       else { 

        Auth::login($check); 

        $fan = Fan::find(Auth::user()->id); 
        $fan->image = $user['image']; 
        $fan->save(); 

        return Redirect::to('fans/home'); 
        var_dump($user); 

       } 

इस तालिका में मैं उपयोगकर्ता जानकारी रखने के लिए उपयोग कर रहा हूँ के लिए मॉडल में मेरी कोड कहा जाता है, "प्रशंसक" है मैंने कोशिश की अन्य प्रोफाइल। यह केवल इस मित्र की प्रोफाइल के साथ है कि यह इस त्रुटि को फेंक रहा है। मैं यह भी जोड़ूंगा कि लॉग इन (या रीट्रीज़) पर यह डेटाबेस/टेबल में इस उपयोगकर्ता के लिए कई प्रविष्टियां बनाएगा। यह प्रमाणीकरण प्रणाली ठीक से रोकने के लिए स्थापित की जानी चाहिए। क्या मुझे कुछ याद आ रही है?

+0

के लिए काम किया यह हल आप मिल था लौटना चाहिए? यदि हां, तो क्या आप अपने विचार साझा करेंगे? –

उत्तर

0
Auth::login($check); या Auth::login($new); आप पास करना चाहिए करने के बजाय

,

Auth::login(Auth::user()); 

प्रमाणीकरण :: लॉगिन() फ़ंक्शन public function login(UserInterface $user, $remember = false) तरह UserInterface वस्तु के रूप में पहले पैरामीटर स्वीकार करते हैं और समारोह शरीर में, यह इस $id = $user->getAuthIdentifier(); तरह userid ले जाएगा

एपीआई दस्तावेज़ here पढ़ें।

+0

जब मैं इसे आज़माता हूं, तो मुझे लॉगिन पर निम्न त्रुटि मिलती है: तर्क 1 को रोशनी के लिए पास किया गया है \ Auth \ Guard :: लॉगिन() इंटरफ़ेस को कार्यान्वित करना चाहिए रोशनी \ Auth \ UserInterface, – user1072337

+0

दिया गया है जैसा कि मैंने पहले कहा था, $ चेक का उपयोग करके और उपयोगकर्ताओं के बहुमत के लिए $ नए मूल्य काम कर रहे हैं। मैंने हाल ही में 1 त्रुटि के साथ इस त्रुटि को देखा है। – user1072337

2

सरल सवाल-जवाब:
अपने Fan वर्ग User वर्ग का विस्तार (या लागू करता UserInterface) करता है?
यदि नहीं, तो इसे ठीक करने के तो सबसे आसान तरीका है

class Fan extends User{ 
    .... 
} 
+0

जैसा कि आप ऊपर देख सकते हैं मैंने इसे इस लाइन के अनुसार UserInterface लागू किया है: रोशनी \ Auth \ UserInterface का उपयोग करें; वर्ग फैन एलोक्वेंट उपकरण बढ़ाता है UserInterface { – user1072337

+0

मेरे पास पहले से ही फैन क्लास एलोक्वेंट का विस्तार कर रहा है ... कोई अन्य विचार? – user1072337

4

इस के लिए अपने कोड refactor का प्रयास करें:

$fan = Fan::where('fbid', '=', $user['uid'])->first(); 

if (is_null($fan)) { 
    $fan = new Fan; 

    $fan->fbid = $user['uid']; 
    $fan->email = $user['email']; 
    $fan->first_name = $user['first_name']; 
    $fan->last_name = $user['last_name']; 
    $fan->gender = $user['gender']; 
    $fan->birthday = $user['birthday']; 
    $fan->age = $age; 
    $fan->city = $city; 
    $fan->state = $state_abbrev; 
    $fan->image = $user['image']; 
    $fan->friend_ids_url = $user['friends']; 
    $fan->friend_ids_unpacked = $friend_ids; 

    $fan->save(); 
} else { 
    $fan->image = $user['image']; 
    $fan->save(); 
} 

Auth::loginUsingId($fan->getAuthIdentifier()); 
return Redirect::to('fans/home'); 
0

इस प्रयास करें। मैंने अपना हल किया।

$fan = User:where('id',$socialUser->getId())->first(); 
if(!$fan){ 
    **$fan** = User:create([ 
     'facebook_id' => $socialUser->getId(), 
     'email' => $socialUser->getEmail() 
    ]); 
auth()->login($fan); 
return return->to('whereYouLike'); 
} 
0

मैं एक ही मुद्दा था और मैं कुछ चीजें जाँच करके इसे हल करने में कामयाब रहे:

Argument 1 passed to Illuminate\Auth\Guard::login() must implement interface Illuminate\Auth\UserInterface, null given open:

  • आप देख सकते हैं, null given मतलब यह है कि $user आप चाहते हैं Auth::login($user) रिक्त है । जांचें कि यह चर सेट है या नहीं।
  • Auth :: लॉगिन और अंतिम रीडायरेक्ट() के बीच कोई भी var_dump() न डालें। यह प्रमाणीकरण को रोक सकता है।

यह LoginController में

3

विधि create() में मदद करता है आशा है कि आप $ उपयोगकर्ता कि मुझे

protected function create(array $data) 
    { 
     $user = User::create([ 
      'username' => $data['username'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 

     return $user; 
    } 
संबंधित मुद्दे