Laravel 5.2认证〜基于认证状态的路由

时间:2016-01-19 14:01:41

标签: php laravel authentication laravel-5.2

我正在尝试做一些我认为很简单的事情,我一路上遇到了一些麻烦。我的代码包括我的routes.php和我的verify.php,用于验证用户身份。基本上,我希望根据用户是否经过身份验证来更改到主页的路由。

首先,我有控制器(verify.php

<?php
namespace App\Http\Controllers;
use App\Email;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Google_Client; 
use Auth;
use App\User;
class verify extends Controller
{

public function verifyIdToken(Request $request)
  {
$user = User::where('name', 'Molly')->first();
    Auth::login($user);
    return;
}
  }

当用户首次满足某些要登录的条件时,会在ajax请求中触发此脚本,但这是客户端逻辑,此时并不重要。这个想法是,一旦脚本被命中,用户就会登录。

添加更多细节:

routes.php的标题是:

use Auth;
use Illuminate\Http\Request;

我有什么遗失的吗?

我的routes.php逻辑现在是这样的:

if (Auth::guest()) {
    Route::get('/', function () {
        return view('welcome');
    });
} else {
    Route::get('/', function () {
        return view('mainview');
    });
}

但它仍然无效,即使在verify.php我已在以下确认中添加:

if (Auth::check($user))
{
    return view('aviewII')->with(['verify' => json_encode("Yes!")]);
}

我将在ajax请求中返回。

即使这告诉我我已通过身份验证,但我仍然无法获得经过身份验证的视图。我接下来应该尝试什么?

编辑:我的routes.php完整:

<?php

/*
|--------------------------------------------------------------------------
| Routes File
|--------------------------------------------------------------------------
|
| Here is where you will register all of the routes in an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
use App\punsmodel;
use Illuminate\Http\Request;

if (Auth::guest()) {
    Route::get('/', function () {
        return view('welcome');
    });
} else {
    Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
       return view('mainview');
    });

     Route::get('mainview', function ()    {
       return view('mainviewMolly');
    });
});
}

Route::get('puns', function () {
    return view('puns');
});

Route::post('google' ,  [
    'as' => 'verify.index',
    'uses' => 'verify@verifyIdToken'
]);

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/

Route::group(['middleware' => ['web']], function () {
    //
});

2 个答案:

答案 0 :(得分:2)

我只是在 routes.php

中有条件
if (Auth::guest()) {
    Route::get('/', function () {
        return view('home.logged_out');
    });
} else {
    Route::get('/', function () {
        return view('home.logged_in');
    });
}

另外,还有一些造型技巧:

  • 类应具有“StudlyCased”名称,因此class verify应为class Verify
  • 按字母顺序排列use语句,使扫描更容易;)

<强>更新

如果要检查用户的身份验证状态,则需要确保这些路由里面应用了中间件的组:

Route::group(['middleware' => 'web'], function () {
    if (Auth::guest()) {
        return view('home.logged_out');
    } else {
        return view('home.logged_in');
    }
});

答案 1 :(得分:0)

好的,如果你在L5.2上,这有点不同。检查this article

根据我的要求,您必须在users表中添加api_token字段。然后,当您想要检查用户是否已登录时,您可以执行此操作Auth::guard('api')->check()

当您注册用户时,您必须在响应中返回api_token,并将此字段添加到任何Ajax请求中。

希望有所帮助;)