Rails 6 - Перенаправлено на сервис-работника. js после входа - PullRequest
0 голосов
/ 08 апреля 2020

Я добавил функциональность PWA в свое приложение rails 6.0.2.1, также используя devise, следуя этому руководству, с методом контроллера: https://onrails.blog/2019/01/08/easy-pwas-the-rails-way/

Теперь, когда я вхожу с любой пользователь, я перенаправлен непосредственно к самому файлу рабочего сервиса (http://localhost: 3000 / service-worker. js) вместо пути root. Сам файл скопирован из учебника, и я следовал за ним шаг за шагом. Независимо от того, как тяжело я выглядел, я не мог найти причину перенаправления в файл после входа в систему или регистрации.

Обновление: похоже, оно связано с self.find_first_by_auth_conditions, кодом из devise, позволяющим войдите в систему с именем пользователя вместо электронной почты.

Заранее спасибо! Я действительно застрял ...

Вывод файла журнала при входе в систему: log file output when signing in

# Service Worker Routes
get '/service-worker.js' => "service_worker#service_worker"
get '/manifest.json' => "service_worker#manifest"

# application.js
if (navigator.serviceWorker) {
  navigator.serviceWorker.register('/service-worker.js', { scope: './' })
    .then(function(reg) {
      console.log('[Companion]', 'Service worker registered!');
      console.log(reg);
    });
}
# service_worker.js.erb
var CACHE_VERSION = 'v1';
var CACHE_NAME = CACHE_VERSION + ':sw-cache-';

function onInstall(event) {
 console.log('[Serviceworker]', "Installing!", event);
 event.waitUntil(
   caches.open(CACHE_NAME).then(function prefill(cache) {
     return cache.addAll([
       '<%= asset_pack_path 'application.js' %>',
       '<%= asset_pack_path 'application.css' %>',
     ]);
   })
 );
}

function onActivate(event) {
 console.log('[Serviceworker]', "Activating!", event);
 event.waitUntil(
   caches.keys().then(function(cacheNames) {
     return Promise.all(
       cacheNames.filter(function(cacheName) {
         // Return true if you want to remove this cache,
         // but remember that caches are shared across
         // the whole origin
         return cacheName.indexOf(CACHE_VERSION) !== 0;
       }).map(function(cacheName) {
         return caches.delete(cacheName);
       })
     );
   })
 );
}

// Borrowed from https://github.com/TalAter/UpUp
function onFetch(event) {
 event.respondWith(
   // try to return untouched request from network first
   fetch(event.request).catch(function() {
     // if it fails, try to return request from the cache
     return caches.match(event.request).then(function(response) {
       if (response) {
         return response;
       }
       // if not found in cache, return default offline content for navigate requests
       if (event.request.mode === 'navigate' ||
         (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
         console.log('[Serviceworker]', "Fetching offline content", event);
         return caches.match('/offline.html');
       }
     })
   })
 );
}

self.addEventListener('install', onInstall);
self.addEventListener('activate', onActivate);
self.addEventListener('fetch', onFetch);
def self.find_first_by_auth_conditions(warden_conditions)
   conditions = warden_conditions.dup
   if login = conditions.delete(:login)
     where(conditions.to_h).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first // row 35 referenced in log file
   elsif conditions.has_key?(:username) || conditions.has_key?(:email)
     where(conditions.to_h).first
   end
 end
...