Bootstrap Auth Scaffolding

https://www.itsolutionstuff.com/post/laravel-10-bootstrap-auth-scaffolding-tutorialexample.html

composer require laravel/ui
npm install && npm run build
php artisan migrate

USER MUST BE VERIFIED
LoginController:
    protected function authenticated(Request $request, $user)
    {
        if(!$user->email_verified_at ){
            $this->logout($request);
        }
    }

DONT LOGIN AFTER REGISTRATION
RegisterContoller:
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        // $this->guard()->login($user);

        if ($response = $this->registered($request, $user)) {
            return $response;
        }

        return $request->wantsJson()
                    ? new JsonResponse([], 201)
                    : redirect($this->redirectPath());
    }

ignore ext

composer.json:

"config": {
  "platform": {
    "ext-pcntl": "7.1",
    "ext-posix": "7.1"
  }
}

 

Migrate to other Database

php artisan migrate --database=db_connection_name
php artisan migrate --database=db_connection_name --seed
php artisan migrate:refresh --database=db_connection_name --seed

nWidart modules

nWidart/laravel-modules
https://github.com/nWidart/laravel-modules
https://nwidart.com/laravel-modules/v6/basic-usage/
Tutorial
https://medium.com/@destinyajax/how-to-build-modular-applications-in-laravel-the-plug-n-play-approach-part-2-c23e8089aeee?
Examples

php artisan module:make <module-name>
php artisan module:make Blog User Auth (multiple modules)
php artisan module:make Blog --plain
# or
php artisan module:make Blog -p
php artisan module:make-model Customers <module-name>
php artisan module:make-model Customers -m <module-name> (with migration)
php artisan module:make-migration create_customers_table <module-name>
php artisan module:make-controller CustomersController <module-name>
php artisan module:migrate <module-name>
php artisan module:seed <module-name>

eloquent query scope

Defining A Query Scope


class User extends Eloquent {

    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    public function scopeWomen($query, $gender)
    {
        return $query->whereGender($gender);
    }

}

Utilizing A Query Scope

$users = User::popular()->women($gender)->orderBy('created_at')->get();

laravel dusk

works on windows (atkrp demesi i: chromedriver)
composer require --dev laravel/dusk:"^5.4"

composer require --dev laravel/dusk - latest version
it needs pcntl (dont work on windows)

chromedriver
https://github.com/laravel/dusk/issues/490
https://chromedriver.storage.googleapis.com/index.html?path=2.36/

download chromedriver and put in directory: vendor/laravel/dusk/bin
Managing ChromeDriver Installations
php artisan dusk:chrome-driver --all

https://laravel.com/docs/6.x/dusk

model read-only

1. You can setup global listener for all the models:

Event::listen('eloquent.saving: *', function ($model) {
  return false;
});
2. Or for given model:

Event::listen('eloquent.saving: User', function ($user) {
  return false;
});
// or
User::saving(function ($user) {
  return false;
});

// If it's not global, but for single model, then I would place it in boot():
// SomeModel
public static function boot()
{
   parent::boot();

   static::saving(function ($someModel) {
      return false;
   });
}
3. For read-only model you need just one saving event listener returning false, then all: Model::create, $model->save(), $model->update() will be rejected.
4. Here's the list of all Eloquent events: booting, booted, creating, created, saving, saved, updating, updated, deleting, deleted and also restoring and restored provided by SoftDeletingTrait.
https://stackoverflow.com/questions/28203317/prevent-certain-crud-operations-on-laravel-eloquent-models

 

ajaxSetup

<input name='_token' type="hidden" value="{{csrf_token()}}" />
arba
echo csrf_field(); //sukuria input, auksciau
------------
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

Laravel Collective – checkboxes checked

 

Example: Player groups

{{ Form::model($player, ['route'=>['players.update', $player->id], 'method'=>'PUT']) }}
    @foreach($groups as $group)
       {{ Form::checkbox('groups[]', $group->id, null, ['id' => 'group-'.$group->id] ) }}
    @endforeach
{{ Form::close() }}

Passport

https://laravel.com/docs/5.7/passport
https://tutsforweb.com/laravel-passport-create-rest-api-with-authentication/
laravel 5.5 
  composer require laravel/passport=~4.0

1. composer require laravel/passport
2. php artisan migrate
3. php artisan passport:install
1. User.php
use Laravel\Passport\HasApiTokens;
class User{
use HasApiTokens, ...
}

2. AuthServiceProvider.php
  use Laravel\Passport\Passport;
  boot(){
      Passport::routes();
  }

3. config\auth.php
  'api' => [
    'driver' => 'passport',
    'provider' => 'users'
  ]
Route::post('login', 'PassportController@login');
Route::post('register', 'PassportController@register');
Route::middleware('auth:api')->get('user', 'PassportController@details');

public function register(Request $request)
{
    $this->validate($request, [
        'name' => 'required|min:3',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6',
    ]);
 
    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => bcrypt($request->password)
    ]);
 
    $token = $user->createToken('TutsForWeb')->accessToken;
 
    return response()->json(['token' => $token], 200);
}

public function login(Request $request)
{
    $credentials = [
        'email' => $request->email,
        'password' => $request->password
    ];
 
    if (auth()->attempt($credentials)) {
        $token = auth()->user()->createToken('TutsForWeb')->accessToken;
        return response()->json(['token' => $token], 200);
    } else {
        return response()->json(['error' => 'UnAuthorised'], 401);
    }
}

public function details()
{
    return response()->json(['user' => auth()->user()], 200);
}


public function logout(Request $request){
    $logged_out = false;		
    if (auth()->check())
        $logged_out = auth()->user()->token()->revoke();	
    $data = ['logged_out' => $logged_out];
    return response()->json($data, 200);
}

after laravel install

PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes")
app/Providers/AppServiceProvider.php

use Illuminate\Support\Facades\Schema;
function boot()
{
    Schema::defaultStringLength(200); //Solved by increasing StringLength
}

send gmail

GMAIL
Allow less secure apps: ON
https://myaccount.google.com/lesssecureapps?pli=1

 

Open your mail.php under config folder then fill with this option :

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' =>env('MAIL_HOST', 'smtp.gmail.com'),
'port' =>env('MAIL_PORT', 587),
'from' => ['address' =>'youremail@mail.com', 'name' => 'Email_Subject'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' =>env('MAIL_USERNAME','yourusername@mail.com'),
'password' =>env('MAIL_PASSWORD','youremailpassword'),
'sendmail' =>'/usr/sbin/sendmail -bs',

Open your .env file under root project. Also edit this file following above option such

MAIL_DRIVER=smtp    
MAIL_HOST=smtp.gmail.com   
MAIL_PORT=587      
MAIL_USERNAME=youremailusername<br>
MAIL_PASSWORD=youremailpassword
MAIL_ENCRYPTION=tls

After that clear your config by running this command

php artisan config:cache

Restart your local server

cors

siulau naudoti package:
https://github.com/barryvdh/laravel-cors

ARBA ziureti zemiau
KERNEL.php:
\App\Http\Middleware\Cors::class,
namespace App\Http\Middleware;
use Closure;

class Cors
{
  /**
  * Handle an incoming request.
  *
  * @param \Illuminate\Http\Request $request
  * @param \Closure $next
  * @return mixed
  */
  public function handle($request, Closure $next)
  {
    $domains = ['http://localhost:8080'];
    //header('Access-Control-Allow-Origin: *');

    if(isset($request->server()['HTTP_ORIGIN'])){
      $origin = $request->server()['HTTP_ORIGIN'];
      if( in_array($origin, $domains) ){

        header('Access-Control-Allow-Origin: ' . $origin);
        header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
      }
    }

    return $next($request);
  }
}