2015-10-11 63 views
0

我正在将Facebook登录集成到我的新Laravel 5.1中。用户可以选择使用Facebook登录或传统表单登录手动登录。到目前为止,我拥有实施传统的登录NotFoundHttp异常(未找到控制器方法) - Laravel 5.1 Facebook登录

对于Laravel社会名流没问题,我想我已经设置正确

composer.json

"laravel/socialite": "^2.0", 

配置/ app.php

'providers' => [ 

    /* 
    * Laravel Framework Service Providers... 
    */ 
    ......... 
    ......... 
    Illuminate\Html\HtmlServiceProvider::class, 

    /* 
    * Application Service Providers... 
    */ 
    App\Providers\AppServiceProvider::class, 
    App\Providers\AuthServiceProvider::class, 
    App\Providers\EventServiceProvider::class, 
    App\Providers\RouteServiceProvider::class, 

    Laracasts\Flash\FlashServiceProvider::class, 
    Laracasts\Generators\GeneratorsServiceProvider::class, 

    AlgoliaSearch\Laravel\AlgoliaServiceProvider::class, 

    Laravel\Socialite\SocialiteServiceProvider::class, 

], 

AuthController

<?php 

namespace App\Http\Controllers\Auth; 

use Socialite; 
//use Illuminate\Routing\Controller; 
use App\User; 
use Validator; 
use Auth; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
{ 


use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

protected $redirectTo = '/admin'; 

/** 
* Create a new authentication controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware('guest', ['except' => 'getLogout']); 
} 
//temporarily redirected to duterte-run.mendanielle.com 
public function getRegister() 
{ 
    return view('auth.login'); 
} 
/** 
* Get a validator for an incoming registration request. 
* 
* @param array $data 
* @return \Illuminate\Contracts\Validation\Validator 
*/ 
protected function validator(array $data) 
{ 
    return Validator::make($data, [ 
     'username' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|confirmed|min:6', 
    ]); 
} 

/** 
* Create a new user instance after a valid registration. 
* 
* @param array $data 
* @return User 
*/ 
protected function create(array $data) 
{ 
    return User::create([ 
     'firstname' => $data['firstname'], 
     'lastname' => $data['lastname'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 
} 

/** 
* Redirect the user to the GitHub authentication page. 
* 
* @return Response 
*/ 
public function redirectToProvider() 
{ 
    return Socialite::driver('facebook')->redirect(); 
} 

/** 
* Obtain the user information from GitHub. 
* 
* @return Response 
*/ 
public function handleProviderCallback() 
{ 
    // try { 
     $user = Socialite::driver('facebook')->user(); 
    // } catch (Exception $e) { 
    // return redirect('auth/facebook'); 
    // } 

    // $authUser = $this->findOrCreateUser($user); 

    // Auth::login($authUser, true); 

    // return redirect()->route('home'); 
} 

routes.php文件

Route::get('/auth/facebook', 'Auth\[email protected]'); 
Route::get('/auth/facebook/callback', 'Auth\[email protected]'); 

// Logging in and out 
get('/auth/login', 'Auth\[email protected]'); 
post('/auth/login', 'Auth\[email protected]'); 
get('/auth/logout', 'Auth\[email protected]'); 

登录表单

<form class="form-horizontal" role="form" method="POST" action="{{ url('/auth/login') }}"> 
<input type="hidden" name="_token" value="{{ csrf_token() }}"> 

<div class="form-group"> 
    <label class="col-md-4 control-label">E-Mail Address</label> 
    <div class="col-md-6"> 
    <input type="email" class="form-control" name="email" value="{{ old('email') }}"> 
    </div> 
    </div> 

<div class="form-group"> 
    <label class="col-md-4 control-label">Password</label> 
    <div class="col-md-6"> 
    <input type="password" class="form-control" name="password"> 
    </div> 
    </div> 

<div class="form-group"> 
    <div class="col-md-6 col-md-offset-4"> 
    <div class="checkbox"> 
     <label><input type="checkbox" name="remember"> Remember Me</label> 
    </div> 
    </div> 
</div> 

<div class="form-group"> 
<div class="col-md-6 col-md-offset-4"> 
    <button type="submit" class="btn btn-primary">Login</button> 

    <a class="btn btn-link" href="{{ url('/password/email') }}">Forgot Your Password?</a> 
</div> 
</div> 
<div class="form-group"> 
    <div class="col-md-6 col-md-offset-4"> 
    <a class="btn btn-link" href="{{ url('/auth/facebook') }}">Login With Facebook</a> 
    </div> 
</div> 
</form> 

我也跟着在Laravel.com网站最新的文档了,里面services.php

'facebook' => [ 
    'client_id' => env('FACEBOOK_CLIENT_ID'), 
    'client_secret' => env('FACEBOOK_CLIENT_SECRET'), 
    'redirect' => env('CALL_BACK_URL'), 
], 

而.ENV文件

FACEBOOK_CLIENT_ID=1834566497828637244 
FACEBOOK_CLIENT_SECRET=9505676d1f50bty7b613baa7b68786op5ba48 
CALL_BACK_URL=http://localhost:9090/auth/login 

登录按钮将我重定向到

localhost:9090/auth/facebook 

NotFoundHttpException in Controller.php line 269: 
Controller method not found. 

在控制器 - > missingMethod( '实') 在call_user_func_array(阵列(对象('_ missing'=>'facebook'))在Controller-> callAction('missingMethod')中的数组('AuthController','missingMethod'),数组('_ missing'=>'facebook'))在ControllerDis中在ControllerDispatcher.php中的ControllerDispatcher-> call(对象(AuthController),对象(Route),'missingMethod')行中的patcher.php行164 行112 at ControllerDispatcher-> Illuminate \ Routing {closure}(object(Request)) 在call_user_func(对象(闭合),对象(请求))在Pipeline.php线139 在Pipeline->照亮\管道{闭合}在RedirectIfAuthenticated.php线(对象(请求))41

那么什么是正确的方式?你如何将Laravel 5.1集成到Socialite中?

更新

我看到这个 '奇怪' 的结果在PHP工匠路线:列表

GET|HEAD|POST|PUT|PATCH|DELETE | auth/{_missing}          | App\Http\Controllers\Auth\[email protected]   | guest  | 

刚下

   |  auth/facebook|App\Http\Controllers\Auth\[email protected] 
+0

不要公开你的Facebook客户端ID /秘密 – manix

+0

其唯一的一个虚拟 –

回答

1

得到它

在控制器,而不是

use App\Http\Controllers\Controller; 

这是正确的控制器

use Illuminate\Routing\Controller; 

我固定的路线,

Route::get('/auth/facebook/callback','Auth\[email protected]'); 

应该与.ENV文件中列出的通话back_url这是

http://localhost:9090/admin 

所以要纠正此问题

Route::get('/admin','Auth\[email protected]'); 

保存时,如果用户没有在数据库中列出需要一些调整,但它工作时的注册用户登录

相关问题