Laravel 5.2 身份验证 ~ 基于身份验证状态的路由
Laravel 5.2 Authentication ~ Routes Based On Authentication State
我正在尝试做一些我认为很简单的事情,只是遇到了一些麻烦。我下面的代码包括我的 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 请求中命中,但这是 client-side 逻辑,此时并不重要。这个想法是,一旦脚本被命中,用户就会登录。
要添加更多详细信息:
我的routes.php
的header是这样的:
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 () {
//
});
我只是在 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');
}
});
好的,如果您使用的是 L5.2,这会有点不同。检查 this article.
据我了解,您必须向您的用户 table 添加一个 api_token
字段。然后当你想检查用户是否登录时,你可以这样做 Auth::guard('api')->check()
.
当您登录用户时,您必须 return 回复中的 api_token 并将此字段添加到任何 Ajax 请求中。
希望对您有所帮助 ;)
我正在尝试做一些我认为很简单的事情,只是遇到了一些麻烦。我下面的代码包括我的 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 请求中命中,但这是 client-side 逻辑,此时并不重要。这个想法是,一旦脚本被命中,用户就会登录。
要添加更多详细信息:
我的routes.php
的header是这样的:
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 () {
//
});
我只是在 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');
}
});
好的,如果您使用的是 L5.2,这会有点不同。检查 this article.
据我了解,您必须向您的用户 table 添加一个 api_token
字段。然后当你想检查用户是否登录时,你可以这样做 Auth::guard('api')->check()
.
当您登录用户时,您必须 return 回复中的 api_token 并将此字段添加到任何 Ajax 请求中。
希望对您有所帮助 ;)