2015-10-11 2 views
0

Я интегрирую Facebook в мой новый Laravel 5.1. У пользователя будет возможность войти в систему вручную, используя Facebook Login или традиционную регистрационную форму. не проблема реализации традиционного входаNotFoundHttp Exception (метод контроллера не найден) - Laravel 5.1 Facebook Login

Для Laravel Socialite, я не думаю, что я уже установлен правильно

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 ('facebook') в call_user_func_array (массив (объект (AuthController), 'missingMethod'), array ('_ missing' => 'facebook')) в строке Controller.php 256 в Controller-> callAction ('missingMethod', array ('_ missing' => 'facebook')) в ControllerDis patcher.php line 164 at ControllerDispatcher-> вызов (объект (AuthController), объект (маршрут), 'missingMethod') в строке ControllerDispatcher.php 112 в ControllerDispatcher-> Illuminate \ Routing {close} (объект (запрос)) на call_user_func (объект (Closure), объект (Request)) в Pipeline.php строке 139 в Pipeline-> Осветите \ Pipeline {закрытие} (объект (Request)) в RedirectIfAuthenticated.php линии 41

Так что надлежащим образом? Как вы интегрируете Socialite в Laravel 5.1?

обновление

Я вижу этот результат 'странный' в 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 идентификатор клиент/секрет – manix

+0

его только фиктивным –

ответ

1

Понял

В контроллере, вместо

use App\Http\Controllers\Controller; 

Это правильный контроллер

use Illuminate\Routing\Controller; 

И я установил маршруты,

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

должен совпадать с back_url вызовов, перечисленных в файле .env, который

http://localhost:9090/admin 

Так исправить это

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

Нуждается некоторые хитрости при сохранении, если пользователь не указан в базе данных, но он работает, когда пользователь входит зарегистрированные

Смежные вопросы