Laravel маршрутизация с аутентификацией - PullRequest
0 голосов
/ 23 мая 2018

Выполняя свой первый проект laravel, я застрял, пытаясь сделать маршрутизацию с laravel.То, что я хочу, это когда вы вводите localhost и не вошли в систему, а затем отображаете мою страницу входа

Так выглядит моя страница входа в систему, регистрация практически одинакова с различными полями / формами действия

@extends('layout.app')
@section('content')
    <style>
        body {
            background: url{{asset('img/bg.jpg')}} no-repeat center center fixed;
            -webkit-background-size: cover;
            -moz-background-size: cover;
            -o-background-size: cover;
            background-size: cover;
        }
    </style>
    <div class="container h-100 d-flex justify-content-center">
        <div class="row">
            <div class="col-lg-6">
                <div class="jumbotron">
                    <h1>WEB_NAME</h1>
                    <hr>
                    <h2>The place where your ideas may come real</h2>
                    <hr>
                    <p>Add your ideas and let others help you with your plans, vote other's ideas and discuss about
                        them</p>
                </div>
            </div>
            <div class="col-lg-6">
                <h1>Login below</h1>
                <form action="../index.php" method="post">
                    <div class="form-group">
                        <div class="col-xs-3 col-lg-6">
                            <label for="email">Email:</label>
                            <input type="email" class="form-control" name="email" id="email">
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-xs-3 col-lg-6">
                            <label for="password">Password:</label>
                            <input type="password" class="form-control" name="password" id="password">
                        </div>
                    </div>

                    <p><input type="submit" name="submit" value="Login" class="btn btn-primary btn-lg" role="button">
                        <input type="reset" value="Register" class="btn btn-success btn-lg" role="button"
                               href="register.html">
                    </p>
                </form>
            </div>
        </div>
    </div>
@endsection

Это страница макета приложения

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>{{config('app.name','SOCIAL IDEAS')}}</title>

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <!-- Styles -->
    <link href="{{ asset('vendor/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet"/>
</head>
<body>
<div id="app">
    @include('inc.navbar')
    <div class="container">
        @yield('content')
    </div>

    <footer class="bg-dark">
        <div class="container">
            <p class="m-0 text-center text-white">Footer note</p>
        </div>
    </footer>
</div>
<script src="{{asset('vendor/jquery/jquery.js')}}"></script>
<script src="{{asset('vendor/bootstrap/js/bootstrap.min.js')}}"></script>
<script src="{{asset('js/bootstrap-notify.min.js')}}"></script>
<script src="{{asset('vendor/unisharp/laravel-ckeditor/ckeditor.js')}}"></script>
<script>
    CKEDITOR.replace('article-ckeditor');
</script>
</body>
</html>

Маршрутизация выглядит следующим образом

Route::get('/', "PagesController@index");
Route::resource("posts", "PostsController");

Auth::routes();

Route::get('/dashboard', 'DashboardController@index');

Как я должен заставить приложение работать так, как я ожидаю: пользователь заходит на сайт, если аутентифицированидет на страницуЕсли нет, то он автоматически перенаправляется на страницу входа.После регистрации он переходит на ту же страницу, что и выше. Этот проект будет веб-сайтом социальной сети.Пользователи присоединяются, создают сообщения, следят за другими и видят другие сообщения

Проблема сейчас заключается в том, что при вводе localhost / он получает пустую страницу.Видя исходный код страницы, кажется, что он @include модальный из create.blade.php до макета, даже если на странице макета нет модального, этот модал существует в моем проекте, но он не @ нигде не включен

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Я сделал как предложено, и аутентификация работает, как ожидалось, но что-то еще сломалось.У меня есть модальная страница для добавления нового сообщения, но она не работает по некоторым причинам, которые я не вижу.В контроллере постов у меня есть функция create (возвращает «posts.create») и функция store для добавления нового поста в базу данных.

public
    function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required|max:255',
            'description' => 'required|max:2000'
        ]);
        $post = new Post;
        $post->title = $request->input("title");
        $post->description = $request->input("description");
        $post->author_id = Auth::user()->id;
        $post->save();
        return redirect("/posts");
    }

И в представлении create.blade.php у меня есть

<div class="modal fade " id="postsmodal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
     aria-hidden="true">
    <div class="modal-dialog modal-lg" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Create new Post</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <div class="row">
                    <div class="col-lg-4">
                        {!! Form::open(['action' => 'PostsController@store' , "method" => "POST"]) !!}
                        <img class="img-fluid" src="http://placehold.it/250x150" alt="">
                        <div class="form-group">
                            <label for="exampleInputFile">Picuture</label>
                            <input type="file" class="form-control-file" id="exampleInputFile" name="photo"
                                   aria-describedby="fileHelp">
                        </div>
                        <div class="form-group">
                            {{Form::label('Title', "Post Title")}}
                            {{Form::text('title', '',['class' => 'form-control'])}}
                        </div>
                    </div>
                    <div class="col-lg-8">
                        <div class="form-group">
                            {{Form::label('description',"Post Description")}}
                            {{Form::textarea('description', '',
                            ['id' => 'article-ckeditor','class' => 'form-control', 'rows' => '3'])}}
                        </div>
                    </div>
                </div>
            </div>
            <div class="modal-footer">
                <div class="mr-auto">
                    Created by: {!! Auth::user()->first_name," ", Auth::user()->last_name ,
                " on ", \Carbon\Carbon::now()->toDateString()
                !!}
                </div>
                {!! Form::submit("Submit", ['class' => 'btn btn-primary', 'data-dismiss' => 'modal']) !!}
                <input type="button" name="reset" value="Close" class="btn btn-primary">
            </div>
            {!! Form::close() !!}
        </div>
    </div>
</div>

Похоже, он не идет по маршруту, который должен

Auth::routes();

Route::get("/","PostsController@index")->middleware("auth");

Route::resource("posts", "PostsController")->middleware("auth");

Разбился ли я на маршрутах?

Редактировать: Неважно, я понял это.На модальной кнопке отправки данных было отклонение данных вместо переключения данных.Это приведет к тому, что модал будет отклонен вместо закрытия после отправки.

0 голосов
/ 23 мая 2018

Существует несколько способов решения этой проблемы.

1. Ссылка на промежуточное ПО 'auth' в конструкторе DashboardController, например:

class DashboardController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

...

Тогда все запросы к этому контроллерупривязан к промежуточному программному обеспечению 'auth', которое перенаправляет неаутентифицированных пользователей на / вход в систему при попытке доступа к нему.

2. В вашем файле routes/web.php:

Route::group(['middleware' => 'auth'], function() {
    Route::get('/dashboard', 'DashboardController@index');
});

При втором способе промежуточный программный продукт 'auth' будет защищать только маршрут @index.

Надеюсь, это поможет.Веселитесь вместе с вашим первым проектом Laravel!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...