【问题标题】:Adding custom admin panel to laravel with authentication system使用身份验证系统将自定义管理面板添加到 laravel
【发布时间】:2016-06-27 12:34:13
【问题描述】:

您好,我正在尝试将自定义管理面板添加到我的 laravel 项目中。我有一个登录页面。输入有效的电子邮件和密码后,用户可以登录仪表板。但是问题是当我输入有效的电子邮件和密码时,它总是停留在登录屏幕中。

这是我的登录表单

<form class="form-horizontal" action="{{ route('admin.login') }}" method="post">
                    {!! csrf_field() !!}
                        <fieldset>

                            <div class="input-prepend" title="Email">
                                <span class="add-on"><i class="halflings-icon user"></i></span>
                                <input class="input-large span10" name="email" required   maxlength="100"  id="email" type="text" placeholder="type useremail"/>
                            </div>
                            <div class="clearfix"></div>

                            <div class="input-prepend" title="Password">
                                <span class="add-on"><i class="halflings-icon lock"></i></span>
                                <input class="input-large span10" name="password" required id="password" type="password" placeholder="type password"/>
                            </div>
                            <div class="clearfix"></div>

                            <label class="remember" for="remember"><input type="checkbox" id="remember" />Remember me</label>

                            <div class="button-login">  
                                <button type="submit" class="btn btn-primary">Login</button>
                            </div>
                            <div class="clearfix"></div>
                        </fieldset>
                    </form>

这是我的路线

Route::get('/admin/login', [
     'as' => 'admin.login', 
     'uses' => 'AdminController@getLogin'
]);
Route::post('/admin/login', [
     'as' => 'admin.login', 
     'uses' => 'AdminController@postLogin'
]);


Route::group(['middleware' => 'auth'
    ], function () {
    Route::get('/admin', [
     'as' => 'dashboard', 
     'uses' => 'AdminController@index']);
    Route::get('/logout', [
     'as' => 'logout',
     'uses' => 'AdminController@getLogout'  
]);
});

这是我的管理员控制器

 <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;

class AdminController extends Controller
{
    public function index()
    {
        return view('admin.admin_master');  
    }
    public function getLogin() 
    {
        return view('admin.admin_login');
    }
    public function postLogin(Request $request) 
    {
        $this->validate($request, [
            'email' => 'required|email',
            'password' => 'required'
            ]);
        if (Auth::attempt(['email' => $request['email'], 'password' => $request['password']])) {
            // Authentication passed...
            return redirect()->route('dashboard');
        }
        return redirect()->back()->with(['fail' => 'Could not Login']);
    }
    public function getLogout()
    {
        Auth::logout();
        return redirect()->route('admin.login');
    }
}

这里是 Authenticate.php

use Closure;
use Illuminate\Support\Facades\Auth;
class Authenticate
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest(route('admin.login'))->
                withError('You must be logged in !');
            }
        }

        return $next($request);
    }
}

【问题讨论】:

  • 它总是停留在登录屏幕或仅在您输入有效的电子邮件和密码时?
  • 当我输入有效的电子邮件和密码时。
  • 你能加入dashboard路线吗?并检查Auth::attempt 是返回真还是假。
  • 我检查过,Auth::attempt 返回 true,并且 dsahboard 路由将我重定向到登录屏幕,因为我将路由放在中间件中。如果我不使用 meddleware 一切正常,但问题是登录后如果我按下后退按钮它会注销我。
  • 请提供中间件文件。并检查日志文件是否显示任何错误。

标签: laravel


【解决方案1】:

试试这个中间件

public function __construct(Guard $auth)
{
    $this->auth = $auth;
}

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    if ($this->auth->guest()) {
        if ($request->ajax()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect('/admin/login'); //edited line
        }
    }

    return $next($request);
}

尝试使用绝对路由而不是使用它的别名。

【讨论】:

  • 在 UrlGenerator.php 第 307 行出现错误 InvalidArgumentException:未定义路由 [admin/login]。抱歉我用了guest(route('/admin/login)) 现在我改成guest('/admin/login'),但是什么也没发生,页面只是重新加载
【解决方案2】:

可能是重定向到登录页面,因为查看getLoginpostLogin 的路径相同。尝试在表单操作中使用action() 方法而不是route()。例如:

<form class="form-horizontal" action="{{ action('AdminController@postLogin') }}" method="post">
    // other codes....
</form>

提示:如果您使用 Laravel 5.2,请将您的所有路由放在 'middleware'=&gt;'web' 中。例如:

Route::group(['middleware' => ['web']], function () {
    // put your routes here.......
}

【讨论】:

  • {{ action('AdminController@postLogin') }} 没有做任何事情,仍然停留在登录页面。如果我使用 Route::group(['middleware' => ['web']] 而不是 Route::group(['middleware' => 'auth'] 它可以工作,但问题是在我按下后退按钮登录后注销并再次按前进按钮登录仪表板。我该如何解决这个问题
  • @NishanSingha 返回不会注销用户。用户将一直登录到服务器,直到您注销。注销用户而不是返回。
【解决方案3】:

我遇到了同样的问题。我使用 Auth:login($array) 解决了它。将代码更改为

public function postLogin(Request $request) 
{
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required'
        ]);
    $data = $request->input();

    if(Auth::login($data)){
     return redirect('/dashboard');

  }
    return redirect()->back()->with(['fail' => 'Could not Login']);
}

【讨论】:

  • 在 SessionGuard.php 第 418 行出现错误 ErrorException:传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须是 Illuminate\Contracts\Auth\Authenticatable 的实例,Illuminate\Http 的实例\请求给定
  • 那么这个方法上没有数据。可以这样抓取数据: $data = $request->input();然后通过 Auth::login($data) 传递它。
猜你喜欢
  • 2015-06-20
  • 2018-02-19
  • 2015-07-01
  • 1970-01-01
  • 2020-06-17
  • 2016-07-18
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多