Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#26 Re: Laravel 5.x » Почему в Middleware нет остановки по dd Я в шоке это что какойто кеш? » 09.10.2017 12:54:06

dd(); в Middleware не срабатывает, переход на нижний роут

return redirect()->route('sms_login',

происходит даже если я его удалю )))))
Какой то кеш работает наверное незнаю где искать

#27 Laravel 5.x » Почему в Middleware нет остановки по dd Я в шоке это что какойто кеш? » 09.10.2017 12:46:58

imediasun
Ответов: 5

Вот мой роут

Route::any('/account_order','AccountOrderController@index')->name('account_order')->middleware('sms_auth');

Вот Middleware

<?php

namespace App\Http\Middleware;

use App\Http\Controllers\LoginController;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Auth\AuthenticationException;
/*use Illuminate\Contracts\Auth\Factory as Auth;*/
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Support\Facades\View as View;

use App\User;
use AuthenticatesUsers;
class SmsAuthenticate
{



    /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;
protected $type;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory $auth
     * @return void
     */
/*    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }*/

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param  string[] ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle(Request $request, Closure $next)
    {
   dd(123);
        if(isset($request->room)){
            $request->session()->forget('room');
            $request->session()->put('room', $request->room);
        }
        if(isset($request->bathroom)){
            $request->session()->forget('bathroom');
            $request->session()->put('bathroom', $request->bathroom);
        }

        if(null!==($request->input('type'))){
            $request->type=$request->input('type');
        }
        if(null!==($request->input('id'))){
            $id=$request->input('id');
        }
        if (!Auth::check()) {

         return redirect()->route('sms_login',  ['type'=>$request->type,'room'=>$request->room,'bathroom'=>$request->bathroom]);


        }
        else{

            return $next($request);
        }

    }
}

Перехожу на роут sms_login Представляете, Я в шоке где искать уже не знаю

Вот запись в Kernel.php

'sms_auth' => \App\Http\Middleware\SmsAuthenticate::class,

#28 Re: Laravel 5.x » Почему нет аутентификации в Middleware » 06.10.2017 12:11:33

Написал вместо

Auth::check()

auth()->check()
а вместо

Auth::loginUsingId($user[0]->id,true);

auth()->loginUsingId($user[0]->id,true);

Та же проблема ничего не поменялось

#29 Laravel 5.x » Почему нет аутентификации в Middleware » 06.10.2017 00:06:13

imediasun
Ответов: 3

Посмотрите пожалуйста что может быть такое.

dd($request->session()->get('userData'));

Показывает юзера то значит аутентификация прошла успешно и в сессии есть юзер,
так как прошел условие

if(Auth::check())){

А если захожу на страницу home появляется форма логина как для не авторизированного пользователя

<?php

namespace App\Http\Middleware;

use App\Http\Controllers\LoginController;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Support\Facades\View as View;

use App\User;
use AuthenticatesUsers;
class SmsAuthenticate
{



    /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory $auth
     * @return void
     */


    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param  string[] ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle(Request $request, Closure $next)
    {
        dump($request->input('type'));

        if(null!==($request->input('type'))){
            $request->type=$request->input('type');
        }
        if(null!==($request->input('id'))){
            $id=$request->input('id');
        }
        if (!Auth::check()/*!$this->auth->user()*/) {
            if(isset($request->id)){
                $user=User::where('id',$request->id)->get();
                Auth::loginUsingId($user[0]->id,true);
                $request->session()->put('userData', $user);
                
                
       }else{

         return redirect()->route('sms_login',['type'=>$request->type]);
            }
        /*return redirect()->route('sms_login',);*/
        }
        else{
            dd($request->session()->get('userData'));    
        }
        return $next($request);
    }
}

В чем может быть дело?

#30 Re: Laravel 5.x » Middleware sms аутентификации » 29.09.2017 12:23:42

Все понятно - спасибо за совет но вот авторизация все равно не произойдет даже если я ее вконтроллере буду осуществлять, видимо недостаточно аргументов для ее осуществления, я просто пытался понять почему открывается шаблон логина во время вот этого действия

$this->auth->authenticate();

Разве это не приказ просто аутентифицировать пользователя?
По большому счету выносить в контроллер может и надо логику если работать педантично,
но в реалии ничего не поменяется и проблему с аутентификацией это не решит,
Может кто подскажет почему открылась форма логина? А лучше что нужно сделать чтобы аутентифицировать юзера,
может юзер аутентифицируется только при наличии пароля и мыла специальным методом, как тогда имитировать существование пароля и мыла если на момент аутентификации нет их и каким методом это все осуществляется

#31 Laravel 5.x » Middleware sms аутентификации » 28.09.2017 13:57:20

imediasun
Ответов: 2

Помогите пожалуйста разобраться, создал middleware sms_authenticate
Все работает код на телефон приходит сохраняется в базе, но на завершающем этапе когда надо аутентифицировать пользователя в системе методом $this->auth->authenticate();
Что то не срабатывает выкидывает на страницу обычного логина
Хотя у меня своя страница СМС логина была создана
По идее должен аутентифицировать пользователя там занести его в сессиб методами Ларавеля и выйти из middleware на
next request

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Factory as Auth;
use Illuminate\Support\Facades\View as View;
use App\Http\Libraries\sms;
use App\User_login;
use App\Meta;

class SmsAuthenticate
{


    /**
     * The authentication factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;


    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @param  string[] ...$guards
     * @return mixed
     *
     * @throws \Illuminate\Auth\AuthenticationException
     */
    public function handle($request, Closure $next, ...$guards)
    {

        if (!$this->auth->user()) {

            if (isset($_POST['sms_verification']) && $_POST['sms_verification'] == 'true') {
                $phone = preg_replace('~\D+~', '', $_POST['phone']);
                $sms_verification = $this->login($phone, $_POST['login_sms_verification']);

                if (isset($sms_verification['error'])) {
                    $sms_verification['phone'] = $phone;
                    return redirect()->route('view_sms_verification', $sms_verification);
                }

            } else {

                if (isset($_POST['phone'])) {
                    $phone = preg_replace('~\D+~', '', $_POST['phone']);
                }
                if (isset($_POST['sended']) && $_POST['sended'] == 'true') {
                    $response = $this->send_sms($phone);
                    if (isset($response['error'])) {
                        $data_content['error'] = $response['error'];
                    } else {
                        $data_content['phone'] = $phone;
                        return redirect()->route('view_sms_verification', $data_content);
                    }

                } else {

                    return redirect()->route('sms_login');
                }
            }
        }
        $this->auth->authenticate();
        return $next($request);
    }


    function send_sms($phone, $data_content = null)
    {
        $phone = htmlspecialchars($phone);
        $sms = new SMS();
        $result = User_login::check_status($phone);
        if (!$result) {
            // Создаем пользователя если нет такого телефона
            User_login::create_user($phone);

        } else {
            if ($result->status == 0) {
                $response['error'] = trans('login.lg_acc_is_blocked');
                return $response;
            }
        }

        $code = User_login::generateCode(2);
        User_login::save_verification_code($phone, $code);
        $sms_text = Meta::create('sms_to_client_on_login', array('code' => $code));
        /*$response = $sms->send(array('phone'=>$phone,'text'=>$sms_text));*/
        if (isset($response['error'])) {
            return array('error' => trans('login.lg_send_sms_error'));
        } else {
            return TRUE;
        }
    }

    function login($phone, $code)
    {
        $phone = str_replace(' ', '', $phone);
        $saved_code = User_login::return_verification_code($phone);
        if ($saved_code == $code && $code != '') {
            // удаляем код с базы
            User_login::delete_verification_code($phone);
            return true;
        } else {
            return array('error' => trans('login.lg_wrong_code'));
        }

    }


}

Есть мысль что на момент аутентификации в базе нет email && name Может он без этих полей не аутентифицирует, как тогда быть подскажите. По возможности дайте максимально полный ответ.Примного благодарен

#32 Laravel 5.x » Функция возвращает строку, почему в переменной этой строки нет? » 26.08.2017 19:10:29

imediasun
Ответов: 0

Обращаемся так createMongoInfo($user)
protected function generateDomain($domain,$length = 1){
        //Смотрим в базу нет ли там такогоже домена
        $site = Site::where('domain_name',$domain)->get();
        if(isset($site[0])){
            $chars = 'abdefhiknrstyz';
            $numChars = strlen($chars);
            $string = '';
            for ($i = 0; $i < $length; $i++) {
                $string .= substr($chars, rand(1, $numChars) - 1, 1);
            }
            $domain=$domain.'_'.$string;


            $this->generateDomain($domain,$length+1);

        }
        else{
        //No such site
        dump('return',$domain);//Здесь после одного прохода imediasun_z
        return $domain;
        }
   }
    protected function createMongoInfo($user){

       $domain_name=stristr($user->email, '@', true);
       dd($this->generateDomain($domain_name,1));//Null
       

    }
Почему в dd  createMongoInfo NULL когда в ретурне generateDomain imediasun_z smile

#33 Re: Laravel 5.x » Relationships Eloquent » 26.08.2017 16:57:13

$user->role_user->role_id
Ингогда надо спросить у самого себя чтобы понять smile
Может другие методы кому известны быстрее и проще?

#34 Laravel 5.x » Relationships Eloquent » 26.08.2017 16:21:21

imediasun
Ответов: 2

Объясните пожалуйста как нужно сделать в моем случе

Есть таблица Users (id,name,email,...)
Есть таблица Roles (1=>Admin,2=>Guest,...)
Есть таблица Role_users (user_1d=>role_id)

Как мне обратиться к role_id
Когда у меня есть юзер
$user = User::find($activation->user_id);

Я создал Модель Role_user
И в модели User написал следующее
public function role_user()
{
  return $this->hasOne('App\Role_user');
}
Но я не получил однозначного ответа а только вот этот стек
HasOne {#94 ▼
  #foreignKey: "role_users.user_id"
  #localKey: "id"
  #query: Builder {#279 ▶}
  #parent: User {#280 ▶}
  #related: Role_user {#273 ▼
    #connection: "mysql"
    #table: null
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
    #perPage: 15
    +exists: false
    +wasRecentlyCreated: false
    #attributes: []
    #original: []
    #casts: []
    #dates: []
    #dateFormat: null
    #appends: []
    #events: []
    #observables: []
    #relations: []
    #touches: []
    +timestamps: true
    #hidden: []
    #visible: []
    #fillable: []
    #guarded: array:1 [▶]
  }
  #withDefault: null
}

А хочется написать $user->role_id И получить значение smile

#35 Re: Laravel 5.x » Как прокинуть данные из контроллера в темплейт » 15.08.2017 20:53:26

Простите за столь простой вопрос конечно же вот так, знакомлюсь с ларавелем
$html = view('privat/retail/templates/menu_present',$data)->render();

#36 Laravel 5.x » Как прокинуть данные из контроллера в темплейт » 15.08.2017 20:42:17

imediasun
Ответов: 1

Я пользуюсь Ларавель

Хочу в вид динамически подгружать данные с темплейтом
Как осуществить
В основном шаблоне у меня аяксом забираются данные и темплейт для них
[code=javascript]
$.ajax({
            type: 'POST',
            dataType: 'json',
            url: '/privat/showCompanyMenu',
            success: function(jsondata){
              $('#result').html(jsondata)
           }
        });
[/code]
А вот файл в котором происходит выбор подгружаемого темплейта и данных к нему
[PHP]
public function showCompanyMenu()
    {
        //Возвращает данные меню по конкретному юзеру
        //И возвращает HTML шаблон для отображения представления меню
        $html = view('privat/retail/templates/menu_present')->render();
        $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5, 'html'=>$html);
        $json_string=json_encode($arr);
        echo $json_string;


    }
[/PHP]
Как данные (a,b,c,d) прокинуть в шаблон чтобы в json получить html с данными

#37 Laravel 5.x » Как указать путь к папке с видами в обход роутов » 15.08.2017 17:18:54

imediasun
Ответов: 1

Я пытаюсь в контексте подгрузить html файл через Аякс

$.ajax({
            type: 'POST',
            dataType: 'json',
            url: '/privat/showCompanyMenu',
            success: function(jsondata){
            $( "#result" ).load( "/resources/views/"+"privat/retail/templates/menu_present.html" );
            }
        });

Но видно роутинг блокирует обращение к папкам фреймворка в обход него,
Как мне указать файл который в папке видов лежит так чтобы Аякс успешно отработал?

#38 Re: Laravel 5.x » Мультидомены на ларавеле » 14.08.2017 18:37:31

Я сделал Через ДНС только вот вопрос по Ларавелю есть
Я допустим хочу зайти на сайт imedia.domen.loc/
Вот этот роут почему то не срабатывает
Route::domain('{account}.domen.loc')->group(function () {

    Route::get('/', function ($account) {
        dd($account);
    });
});

А если вот так
Route::domain('{account}.domen.loc')->group(function () {

    Route::get('/user', function ($account) {
        dd($account);
    });
});
То захожу но мне же корень тоже нужен как, туда попасть?

#39 Laravel 5.x » Мультидомены на ларавеле » 14.08.2017 13:56:01

imediasun
Ответов: 4

У меня тут проблема с поддоменами
Смотри если я в /etc/hosts/ указываю 127.0.0.1  magelan.loc     sun.magelan.loc
я попадаю на свой индекс это отлично так и надоно если я указываю
127.0.0.1 magelan.loc      *.magelan.loc

такого сайта не видит апач
Можешь помочь?

#40 Re: Laravel 5.x » После логина не записывается что клиент залогинен » 12.08.2017 16:58:58

Это что значит что нельзя проверять таким образом в конструкторе?
$this->middleware('auth');?
Я убрал этот мидлвеар из конструктора но по прежнему нет залогиненого пользователя

#41 Laravel 5.x » После логина не записывается что клиент залогинен » 12.08.2017 16:32:36

imediasun
Ответов: 3

Такая ситуация что в HomeController
в который после логина перекидывает
есть в конструкторе вот такая строка
public function __construct()
    {
    $this->middleware('auth');
    }
если я ее убираю попадаю в Home controller
но она ж наверное и нужна чтобы без логина туда не заходили
А если до него прописать  dd(Auth::user()->id);
Получаю ошибку что такого объекта нет,
Выходит нет авторизации?
Auth::check() = false
Как найти косяк?
Хотя я залогиниваюсь этому свидетельствует вот этот вывод
protected function sendLoginResponse(Request $request)
    {
        $request->session()->regenerate();
        $this->clearLoginAttempts($request);
        dd($this->authenticated($request, $this->guard()->user())
        ?: redirect()->intended($this->redirectPath()));
    }
Здесь не происходит редирект а есть конкретный респонс с путем куда нужно перенаправить в случае успешного логина
Может что то с сесиями и не хранится Auth:user() Как это проверяется?

#43 Re: Laravel 5.x » Подскажите почему я не вижу респонса при исключении? » 12.08.2017 12:34:39

Да супер ты меня понял, но вот объект этот не содержит ошибок, у меня расписано как ты написал но ошибки не появляются

#44 Re: Laravel 5.x » Подскажите почему я не вижу респонса при исключении? » 12.08.2017 12:18:05

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

#45 Laravel 5.x » Подскажите почему я не вижу респонса при исключении? » 12.08.2017 10:51:46

imediasun
Ответов: 5

Я логинюсь через /login
Отдебажил что выкидывает вот это исключение в экшене login
if ($this->attemptLogin($request)) {
            return $this->sendLoginResponse($request);
        }
По идее я должен где то видеть ответ - этот респонс, но просто опять форма логина.
Есть какие то идеи как подключить грамотно вывод респонса?

#46 Re: Laravel 5.x » MethodNotAllowedHttpException » 12.08.2017 10:46:43

Спасибо, ваше решение помогло действительно просто кеш ))

#47 Laravel 5.x » MethodNotAllowedHttpException » 11.08.2017 20:29:16

imediasun
Ответов: 2

Привет всем, подскажите в чем дело в форме метод-post

<form class="form-horizontal" role="form" method="POST" action="{{route('registerBuyer')}}">

Роут на обработку указано POST

Route::post('register_buyer', 'Auth\RegisterController@register')->name('registerBuyer');

Почему я попадаю в это исключение?

#48 Re: Laravel 5.x » Как работает маршрут когда его в файле роутов нет » 11.08.2017 12:17:58

Auth::routes();
Есть запись в роут файле, вот как найти бы где записаны роуты в Auth?

#50 Re: Laravel 5.x » Как работает маршрут когда его в файле роутов нет » 11.08.2017 11:55:24

На комманду route:list
я получил список роутов
Очень хочу разобраться как показывается форма регистрации
GET|HEAD | register| register| App\Http\Controllers\Auth\RegisterController@showRegistrationForm 
Есть вот такой роут (очень хочется понять где он прописан так как в файлах роутов его нет 100%)
И этого экшена нет а форма показывается

Подвал раздела